#c #windows #codeblocks #fopen #working-directory
#c #Windows #codeblocks #fopen #рабочий каталог
Вопрос:
Я работаю над проблемой CFD в c, используя CodeBlocks (Windows). Когда я пытаюсь записать результирующие файлы с помощью fopen (), файлы не создаются (если они есть, их нигде нельзя найти). Скрипт создается как проект с несколькими заголовочными файлами, ошибок не возникает, и скрипт, похоже, работает без сбоев.
Я пытался запустить if (f==NULL)
, но и там ошибки не возникает. Я также безуспешно пытался запустить CodeBlocks от имени администратора, а также перейти к Project -> Properties -> Build targets и убедился, что рабочий каталог выполнения совпадает с рабочим каталогом. Может быть, я неправильно понял, где находится мой рабочий каталог?
Я попытался выполнить поиск по всему диску C: для имени файла на случай, если он был сохранен в каком-то случайном месте, но поиск дал отрицательный результат.
Используемые препроцессоры — stdio, stdlib и math.
Мне приходится записывать несколько файлов, в основном .txt-файлы, но это пример файла .vtf для графики OpenGL.
FILE *f = fopen("GLresults.vtf", "w ");
if (f==NULL)
{
printf("Error");
}
Комментарии:
1. Предполагая, что это
fopen
не возвращаетNULL
, тогда файл должен быть где-то. Вы пробовали искать это по всему диску?2. убедитесь, что у вас есть разрешения на создание или изменение любого файла в каталоге.
3. OT: относительно:
printf("Error");
1) сообщения об ошибках должны выводиться наstderr
, а неstdout
2) при указании ошибки из библиотеки C функция также должна выводить (наstderr
) текстовую причину, по которой система считает, что произошла ошибка. Функция:perror( "my error message" );
выполняет все вышеуказанное правильно. Примечание: послеfopen()
ошибки, скорее всего, код не может быть продолжен, поэтому следующая инструкция должна быть:exit( EXIT_FAILURE );
4. Вы пробовали использовать полный путь? Еще одна вещь, которую стоит попробовать, это открыть файл для чтения , о существовании которого вы знаете и к которому, как вы знаете, есть разрешение на доступ.
5. Кроме того,
printf("Error")
без завершающей новой строки может просто буферизовать строку вместо ее немедленного вывода, и в этом случае вы можете не увидеть сообщение намного позже (или вообще не увидеть, если программа завершается неправильно)
Ответ №1:
Выдает ли ваш код ошибку, если нет, проверьте свой каталог <project directory>binDebug
или <project directory>binRelease
. Например, если ваш проект с именем CFD
находится в C:My Projects
и выбрана цель сборки Debug (которая выбрана по умолчанию), проверьте C:My ProjectsCFDbinDebug
или C:My ProjectsCFDbinRelease
directory.
Ответ №2:
Проблема исправлена! Попробовал несколько предложений выше, но оказалось, что это небольшая и скрытая опечатка в цикле for. Обнаружил ошибку, пытаясь прочитать существующий файл, который не сработал, поэтому я использовал return;
и printf("hellon")
для локализации проблемы.
Спасибо за помощь, много узнал об отладке, выполняя это.