Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SetCurrentDirectory, SetCurrentDirectory 
:(
    Опции темы
asdfcdfdc
Дата 2.6.2011, 00:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.6.2011

Репутация: нет
Всего: нет



Привет всем!
помогите решить проблему с SetCurrentDirectory
если я хочу установить 
SetCurrentDirectory("C:\Новая папка");
так-же есть SetCurrentDirectoryW - пробывал с ней тоже самое не могу не как установить...в чем может быть трабла протестите плиз у себя как у вас устанавливаеся если есть папка на русском?...заранее спасибо
PM MAIL   Вверх
borisbn
Дата 2.6.2011, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 6
Всего: 135



Не
SetCurrentDirectory("C:\ Новая папка");
а
SetCurrentDirectory("C:\\Новая папка");


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
asdfcdfdc
Дата 2.6.2011, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.6.2011

Репутация: нет
Всего: нет



Цитата

Не
SetCurrentDirectory("C:\ Новая папка");

a
S
Цитата

etCurrentDirectory("C:\\Новая папка"); 


угу сорри опечатался...но даже если так всеравно не устанавливается...

PM MAIL   Вверх
borisbn
Дата 2.6.2011, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 6
Всего: 135



Цитата(asdfcdfdc @  2.6.2011,  08:11 Найти цитируемый пост)
но даже если так всеравно не устанавливается...

1. Попробуй так
Код

SetCurrentDirectory("\"C:\\Новая папка\"");

2. А как ты узнаёшь, что
Цитата(asdfcdfdc @  2.6.2011,  08:11 Найти цитируемый пост)
не устанавливается

?



--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
asdfcdfdc
Дата 2.6.2011, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.6.2011

Репутация: нет
Всего: нет



сек ну вот допустим подправил как ты хотел, не устанвливается..
Код

TCHAR buffer[MAX_PATH];
GetCurrentDirectory(sizeof(buffer),buffer);
cout << buffer << endl;
// cin.getline(buffer,sizeof(buffer));
strcpy(buffer,"\"C:\\Новая папка\""); 
cout<<buffer<<endl;
SetCurrentDirectory(buffer);
GetCurrentDirectory(sizeof(buffer),buffer);
cout << buffer << endl;


M
GremlinProg
пользуйтесь инструментами форматирования текста, пожалуйста


Это сообщение отредактировал(а) GremlinProg - 2.6.2011, 10:10
PM MAIL   Вверх
Alca
Дата 2.6.2011, 10:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 5
Всего: 50



Цитата

не устанавливается

да, да, проясни

Добавлено через 1 минуту и 10 секунд
Покажи вывод программы

Добавлено через 2 минуты и 47 секунд
И где проверка результатов апишных функций?

Добавлено через 3 минуты и 45 секунд
Код

#include <windows.h> 
#include <stdio.h>
#include <tchar.h>

#define BUFSIZE MAX_PATH
 
void _tmain(int argc, TCHAR **argv) 

   TCHAR Buffer[BUFSIZE];
   DWORD dwRet;

   if(argc != 2)
   {
      _tprintf(TEXT("Usage: %s <dir>\n"), argv[0]);
      return;
   }

   dwRet = GetCurrentDirectory(BUFSIZE, Buffer);

   if( dwRet == 0 )
   {
      printf("GetCurrentDirectory failed (%d)\n", GetLastError());
      return;
   }
   if(dwRet > BUFSIZE)
   {
      printf("Buffer too small; need %d characters\n", dwRet);
      return;
   }

   if( !SetCurrentDirectory(argv[1]))
   {
      printf("SetCurrentDirectory failed (%d)\n", GetLastError());
      return;
   }
   _tprintf(TEXT("Set current directory to %s\n"), argv[1]);

   if( !SetCurrentDirectory(Buffer) )
   {
      printf("SetCurrentDirectory failed (%d)\n", GetLastError());
      return;
   }
   _tprintf(TEXT("Restored previous directory (%s)\n"), Buffer);
}


Добавлено через 4 минуты и 7 секунд
http://msdn.microsoft.com/en-us/library/aa...6(v=vs.85).aspx


--------------------
PM WWW ICQ Skype Jabber   Вверх
GremlinProg
Дата 2.6.2011, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



SetCurrentDirectory возвращает результат, который неплохо бы поизучать:
Цитата(SetCurrentDirectory Function @  MSDN)

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.


Добавлено через 1 минуту и 7 секунд
Цитата(Alca @  2.6.2011,  12:11 Найти цитируемый пост)
И где проверка результатов апишных функций?

угу  smile 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
asdfcdfdc
Дата 2.6.2011, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.6.2011

Репутация: нет
Всего: нет



 ну вот смотрите...
Код

        TCHAR buffer[MAX_PATH];
        GetCurrentDirectory(sizeof(buffer),buffer);
        cout << buffer << endl;
      //cin.getline(buffer,sizeof(buffer));  
        
        strcpy(buffer,"C:\\Новая папка"); -<если я использую так то все работает
    if(!SetCurrentDirectory(buffer))
        cout<<GetLastError()<<endl;

        GetCurrentDirectory(sizeof(buffer),buffer);
        cout << buffer << endl;

cin.getline(buffer,sizeof(buffer));   - когда использую это 
пример так 
C:\\Новая папка  или так C:\Новая папка GetLastError() выдает код ошибки 2
PM MAIL   Вверх
GremlinProg
Дата 2.6.2011, 10:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(asdfcdfdc @  2.6.2011,  12:37 Найти цитируемый пост)
strcpy(buffer,"C:\\Новая папка"); -< если я использую так то все работает

Цитата(asdfcdfdc @  2.6.2011,  12:37 Найти цитируемый пост)
C:\\Новая папка  или так C:\Новая папка GetLastError() выдает код ошибки 2

так что не работает-то?

код ошибки 2: "Не удается найти указанный файл."


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
asdfcdfdc
Дата 2.6.2011, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 2.6.2011

Репутация: нет
Всего: нет



мне нужно программно устанавливать директорию
Код

TCHAR buffer[MAX_PATH];
GetCurrentDirectory(sizeof(buffer),buffer);
cout << buffer << endl;
cin.getline(buffer,sizeof(buffer));  - получаю с консоли в буфер пример так C:\\Новая папка или C:\Новая папка
//Эта проблема возникает если переходить в папки с рус.названием...
// strcpy(buffer,"C:\\Новая папка"); -< это для примера было, если устанавливать дир.не программно

    if(!SetCurrentDirectory(buffer))
        cout<<GetLastError()<<endl;
        GetCurrentDirectory(sizeof(buffer),buffer);
        cout << buffer << endl;


не программно работает 
strcpy(buffer,"C:\\Новая папка");

не работает
SetCurrentDirectory("\"C:\\Новая папка\"");
или
SetCurrentDirectory("C:\\Новая папка");
или
SetCurrentDirectory("C:\Новая папка\");
или 
SetCurrentDirectory("C:\\Новая папка\");

программно не работает
использование 
cin.getline(buf);
cin>>buf;

нужно с консоли программно установить директорию с рус.название


Это сообщение отредактировал(а) asdfcdfdc - 2.6.2011, 10:51
PM MAIL   Вверх
RastaDja
Дата 2.6.2011, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 1.11.2010

Репутация: нет
Всего: 5




Цитата(asdfcdfdc @  2.6.2011,  11:47 Найти цитируемый пост)
не программно работает 
strcpy(buffer,"C:\\Новая папка");

не работает
SetCurrentDirectory("\"C:\\Новая папка\"");
или
SetCurrentDirectory("C:\\Новая папка");
или
SetCurrentDirectory("C:\Новая папка\");
или 
SetCurrentDirectory("C:\\Новая папка\");

программно не работает
использование 
cin.getline(buf);
cin>>buf;

ОМГ  smile. что тут написано. Вы сами понимаете? ЗапЯтые ещё не отменил никто.



--------------------
The more closely you look at one thing, the less closely can you see something else.
PM MAIL   Вверх
GremlinProg
Дата 2.6.2011, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



вот оно что  smile 
программно, т.е. из консоли

значит проблема не с SetCurrentDirectory, а с кодировкой

Код

setlocale(LC_ALL,".866");// кодировка dos
setlocale(LC_ALL,".1251");// кодировка windows

одно из двух должно помочь, если вызвать перед любым чтением из консоли


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
afiskon
Дата 2.6.2011, 14:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

Репутация: нет
Всего: 4



Ну вы, ребят, извращенцы smile
Код

SetCurrentDirectoryW(L"C:\\папка");

Если в настройках проекта указано, что он в юникоде, можно просто SetCurrentDirectory, но строка обязательно должна быть в юникоде L"...."
PM MAIL WWW   Вверх
GremlinProg
Дата 2.6.2011, 14:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

Репутация: 99
Всего: 106



Цитата(afiskon @  2.6.2011,  16:10 Найти цитируемый пост)
SetCurrentDirectoryW(L"C:\\папка");

вообще-то настройки проекта на этот вызов ни как не влияют  smile 


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
afiskon
Дата 2.6.2011, 15:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 294
Регистрация: 31.3.2011
Где: Россия, Москва

Репутация: нет
Всего: 4



Хм... мне казалось, что в 10-й студии влияет. Ну да ладно...
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1050 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.