Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу создать файл, используя функцию CreateFile()  (Прочитано 21279 раз)
0 Пользователей и 9 Гостей смотрят эту тему.
Дмитрий
Гость
« : 12-08-2008 15:36 » 

Добрый вечер. У меня возникла проблема: я написал приложение со стандартным диалогом "Сохранить как". Когда набираю имя файла, нажимаю "сохранить" - файл почему-то не создается. Ниже приведен код:
Код:
OPENFILENAME ofn;
static LPWSTR szFILE;
static HANDLE hf;


LPCWSTR FILTER=L"All supported formats(*.dat)\0*.dat\0";


ZeroMemory(&ofn,sizeof(OPENFILENAME));

ofn.lStructSize     = sizeof(OPENFILENAME);
ofn.hwndOwner       = NULL;
ofn.lpstrFile       = szFILE;
ofn.nMaxFile        = sizeof(szFILE);
ofn.lpstrFilter     = FILTER;
ofn.lpstrFileTitle  = NULL;
ofn.nMaxFileTitle   = 0;
ofn.nFilterIndex    = 1;
ofn.lpstrInitialDir = NULL;
ofn.Flags           = OFN_EXPLORER;


if (GetSaveFileName(&ofn)==TRUE)
{hf = CreateFile(ofn.lpstrFile,
                 GENERIC_WRITE | GENERIC_READ,
                 0,
                 (LPSECURITY_ATTRIBUTES) NULL,
                 CREATE_NEW,
                 FILE_ATTRIBUTE_NORMAL,
                 (HANDLE) NULL );

return hf;
}
Если кто-нибудь подскажет в чем проблема - буду очень признателен.
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 12-08-2008 16:20 » 

Дмитрий, смотри ошибку, которую возвращает CreateFile - там все сказано.
И потом - я бы не стал писать if (GetSaveFileName(&ofn)==TRUE), если в документации сказано "nonzero", а не TRUE.
http://msdn.microsoft.com/en-us/library/ms646928.aspx
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #2 : 12-08-2008 16:45 » 

0) вместо FILE_ATTRIBUTE_NORMAL поставить 0
1) OPEN_ALWAYS вместо CREATE_NEW (CREATE_NEW обломает, если файл уже создан, OPEN_ALWAYS - пересоздаст) - если нужно
2) проверить, что в строке ofn.lpstrFile , когда входим в CreateFile
3) вызвать GetLastError сразу после CreateFile


Записан

Дмитрий
Гость
« Ответ #3 : 12-08-2008 16:53 » 

RXL
В том то все и дело, что CreateFile() не возвращает ошибок, а просто файл не создает. А если я прописываю в ней hf = CreateFile(L"Hello",....), то по указанному пути создается файл Hello. Я не могу понять в чем ошибка поэтому
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 12-08-2008 17:21 » 

Дмитрий, ставь контрольную точку в отладчике и иди пошагово, проверяя значения, в которые могут повлиять на результат. И прислушайся к Лехе.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #5 : 12-08-2008 21:09 » 

А что говорит GetLastError? Может ты действительно не можешь файл создать? Например прав должных не имеешь?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Дмитрий
Гость
« Ответ #6 : 12-08-2008 21:28 » 

А как напечатать что GetLastError возвращает?
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #7 : 12-08-2008 22:17 » new

Нууу например цифрами.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #8 : 12-08-2008 22:47 » 

Ку-ку? Код ошибки напиши, я сам могу посмотреть, что он означает.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 12-08-2008 22:59 » 

Дмитрий, короче голову не морочь. У тебя не CreateFile не работает, а твой диалог по выбору имени файла. У тебя ofn.lpstrFile = 0х00000000, и ты ЭТО передаёшь в CreateFile, так чего же ты хочешь?

Ты вобще дебагером пользуешься? Это же видно при первом проходе. Жаль
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Дмитрий
Гость
« Ответ #10 : 12-08-2008 23:01 » 

Я отходил. Да пользуюсь, дебаг ничего не находит.
Записан
Дмитрий
Гость
« Ответ #11 : 12-08-2008 23:03 » 

Есть мысли что тут проблема с Юникодом
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #12 : 12-08-2008 23:06 » 

Ну конечно! Что это за бред?

static LPWSTR szFILE;
ofn.lpstrFile = szFILE;
ofn.nMaxFile = sizeof(szFILE);

Что у тебя есть szFILE и чему равно sizeof(szFILE)?

Загадка: Пьеро дал Буратино пять яблок. Буратино съёл три яблока. Сколько яблок осталось у Буратино?
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #13 : 12-08-2008 23:07 » 

подсказка - юникод здесь не при чём.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Дмитрий
Гость
« Ответ #14 : 12-08-2008 23:15 » 

Джон, я сам увидел - действительно тупость полная. Сппасибо тебе огромное!!!
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #15 : 12-08-2008 23:16 » 

Так как насчёт загадки? Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #16 : 12-08-2008 23:18 » 

Кстати Лёшка ещё вчера об этом сказал:

2) проверить, что в строке ofn.lpstrFile , когда входим в CreateFile

Дебагер сразу ноль покаывает.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Дмитрий
Гость
« Ответ #17 : 12-08-2008 23:19 » 

Ну...Вообще условие некорректное, так как я не знаю сколько яблок было у Буратино до того, как Пьеро дал ему пять яблок...
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #18 : 12-08-2008 23:20 » 

Правильно, а смысл? Ага Переменные должны быть всегда проинициаллизированы. Ага
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Дмитрий
Гость
« Ответ #19 : 12-08-2008 23:22 » 

С такими учителями я это запомню. Спасибо всем, действительно очень помогли  Класс!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines