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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не создается файл, fstream 
V
    Опции темы
Riddik
Дата 11.10.2009, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Получаю путь к файлу:
Код

char filepath[MAX_PATH];

 SHGetFolderPath(...);

PathAppend(filepath, "text.txt");



Нужно создать или открыть этот файл стандартной файловой системой ввода-вывода C++:
Код

ofstream File(path, ios::out);


Не хочет ни открывать, не создавать.
Подскажите, пожалуйста, что не так?

PM MAIL   Вверх
ИванМ
Дата 11.10.2009, 21:49 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Приведите полный код
PM MAIL   Вверх
Riddik
Дата 12.10.2009, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ИванМ, 
Код

char filepath[MAX_PATH];
SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, filepath);
PathAppend(filepath, "text.txt");
ofstream File(filepath, ios::out);

рограмма с включенным в настройках MultiBite.
скорее всего из-за того, что SHGetFolderPath присваивает путь в юникод, а ofstream работает с ASCII

Может быть такое?


Это сообщение отредактировал(а) Riddik - 12.10.2009, 12:17
PM MAIL   Вверх
shklowsky
Дата 12.10.2009, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Riddik @  12.10.2009,  12:09 Найти цитируемый пост)
может быть такое?

нет. была бы ошибка компиляции.

Код

HRESULT co=CoInitialize(NULL);
char path[MAX_PATH]={0};
ofstream File;
if(SHGetSpecialFolderPath(NULL,path,CSIDL_APPDATA,1))
    {
    PathAppend(path,"Text.txt");
    File.open(path);
    }
if(co==S_OK)CoUninitialize();



Это сообщение отредактировал(а) shklowsky - 12.10.2009, 15:37
PM MAIL   Вверх
Riddik
Дата 12.10.2009, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все равно не открывается и не создается! Ну что за напасть...

Это сообщение отредактировал(а) Riddik - 12.10.2009, 16:03
PM MAIL   Вверх
shklowsky
Дата 12.10.2009, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



ОМГ.

Код

HRESULT co=CoInitialize(NULL);
char path[MAX_PATH]={0};
ofstream File;
if(SHGetSpecialFolderPath(NULL,path,CSIDL_APPDATA,1))
    {
    PathAppend(path,"Text.txt");
    File.open(path);
    }
else
    {
    void* buf;
    FormatMessage(
    FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,NULL,
    GetLastError(),
    MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    (LPTSTR) &buf,0,NULL );
    MessageBox(NULL,(const char*)buf,"error!",0);
    LocalFree(buf);
    }
if(co==S_OK)CoUninitialize();


что видишь?
PM MAIL   Вверх
Riddik
Дата 12.10.2009, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ничего.
Функция SHGetSpecialFolderPath успешна, и дальше выполняется блок if, но файл не создаётся.

if(!File.is_open()) MessageBox(NULL, "Не создан", "Error!", 0);
PM MAIL   Вверх
shklowsky
Дата 12.10.2009, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вероятно, процессу не хватает прав для создания файла в этой папке.
опишись маленько- ОС, среда прогр.-я, параметры пользователя
PM MAIL   Вверх
Riddik
Дата 12.10.2009, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



админские права, Windows XP.
среда - студия 9

CreateFile(), кстати, создает файл.
Но мне надо стримами.

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


Эксперт
****


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

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



Есть ли русские символы в пути к файлу?

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

setlocale(LC_ALL,"Russian");



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


Опытный
**


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

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



Да есть. Имя юзера русскими буквами.

Ваш код когда должен быть выполнен, где. перед чем? smile
PM MAIL   Вверх
Alca
Дата 13.10.2009, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Перед 
Код

ofstream File(path, ios::out);



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


Опытный
**


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

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



Alca, спасибо большое! И где же вы раньше былиsmile
Теперь все работает.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0502 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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