я пытаюсь вывести буфер в файл с помощью Visual C ++.
мой код для этого
FILE *stream;
stream=fopen("C:\\Users\\sshekha\\Desktop\\z.txt","r");
//I also tried with "w" mode
//the differencein behavious on executing these two is that when it is in read mode it
//executes the else condition in the code below whereas in "w" mode it executes the "if"// condition,
//moreover even if i change the path it don't execute the "else" condition-that means this path
//is effective to the code. and the another surprising thing is when i open the file manually
// and then run the code with "r" mode it still executes the "else" part (which it shouldn't
// because the file is already open.)
if( stream == 0 )
{
MessageBox(m_hwndPreview,L" the file is not opened ",L"BTN WND",MB_ICONINFORMATION);
}
else
{
MessageBox(m_hwndPreview,L" the file is opened ",L"BTN WND",MB_ICONINFORMATION);
int check=fputs (HtmlFileContents,stream);
fclose(stream);
return 0;
}
Я пытался проверить результаты в другом режиме, чтобы понять, что происходит. когда я отлаживаю его, я получаю значение (в режиме чтения):
stream = 0x000000005c5c76f0 {_ptr = 0x0000000000000000 _cnt = 0 _base = 0x0000000000000000 …}
Я не знаю, это gib = ves плохой указатель, и даже тогда он переходит к другой части цикла. Зачем ?
и в режиме записи
stream = 0x0000000000000000 {_ptr = ??? _cnt = ??? = ??? _Образы базовой …}
Итак, перейдите к части цикла.
Более того, мой путь правильный, и у меня достаточно прав для выполнения желаемой задачи. Но почему он дает плохой указатель? Почему у меня есть эти странные значения потока и что я должен сделать, чтобы скопировать содержимое моего буфера HtmlFileContents
в к z.txt
? Есть идеи ?
Вы открываете файл в режиме только для чтения: fopen("C:\\Users\\sshekha\\Desktop\\z.txt","r");
, Вот "r"
говорит, что вы только собираетесь читать из файла. Чтобы иметь возможность писать содержимое (т.е. fputs(...)
), откройте файл в режиме записи следующим образом: fopen («C: \ Users \ sshekha \ Desktop \ z.txt», «w»)(or
«а» `, если вы хотите добавить). Для дополнительной информации, читать документацию.
РЕДАКТИРОВАТЬ: я вижу, что вы пробовали и режимы чтения и записи. Ваш код показывает только режим чтения и, следовательно, мое предположение о проблеме только для чтения. Позвольте мне сделать немного больше исследований и вернуться.
Пожалуйста, напишите следующий код в вашем if
заявление:
perror("The following error occurred:");
если у вас нет консоли, используйте это для хранения строки ошибки:
char* errorCause = strerror(errno); MessageBoxA(m_hwndPreview, errorCause, "BTN WND", MB_ICONINFORMATION);
и дайте нам знать, что вы видите в качестве причины.
РЕДАКТИРОВАТЬ 2: Поскольку вы упомянули, что вы используете Visual Studio 2010, вы запускаете его как себя? Этот ответ на стекопоток показывает, что VS2010 имеет разные опции при отладке приложений; https://stackoverflow.com/a/3704942/210634
ПРИМЕЧАНИЕ. Эта функция доступна только в версиях Pro.
Вот рабочий пример: https://ideone.com/hVLgc4
Если файл «только для чтения», открытие с правами на запись должно завершиться неудачно.
чтобы увидеть, если это так, под окнами:
Ссылаться на :
http://msdn.microsoft.com/en-us/library/aa365535(v=vs.85).aspx
о том, как изменить права доступа к файлу из вашего кода