это программа:C Еореп не создает новый текстовый файл, возвращает нуль, код ошибки 2
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h> //mkdir
#include <stdio.h> //printf
#include <errno.h> //error number
#include <unistd.h> //access
#include <string.h> //strcat
int makeFile(){
printf("\n- starting makeFile function -\n");
DIR* dirstream = opendir("data");
if(dirstream){
if(access("data/records_file",F_OK) != -1){
printf("\nfile exists!\n");
}else {
//char cpath[1024];
//getcwd(cpath, sizeof(cpath));
//strcat(cpath,"/data/records_file.txt");
//printf("\nfull path is : %s\n",cpath);
errno = 0;
FILE * fp = fopen("data/records_file.txt","r");
printf("\nfile did not exist\n");
if(fp == NULL){
printf("\nfpen returned null, errno :%d \n",errno);
}else if(fp != NULL){ printf("\nmade file\n"); fclose(fp); }
}
closedir(dirstream);
}else if(ENOENT == errno){
mkdir("./data",S_IRUSR|S_IWUSR);
FILE * fp = fopen("./data/records_file.txt","r");
if (fp != NULL){ fclose(fp); }
printf("\ndirectory did not exist. make dir and file\n");
}
printf("\n- leaving makeFile function -\n");
}
int main(){
makeFile();
}
Im пытаясь сделать программу на языке C, который создает текстовый файл с именем «records_file» в каталоге «данные». Каталог «data» находится в рабочем каталоге, который содержит этот исходный код программы и exe.
программа сначала проверяет наличие файла и каталога данных и выводит строку, подтверждающую это, если это так. Это прекрасно работает. когда я удаляю текстовый файл из программы каталога данных, вызывает функцию fopen (Ive огляделся, и fopen, кажется, является стандартным способом создания файла - есть ли другой?)
но результат, возвращаемый функцией, равен нулю, а проверка errno Я вижу, что это 2, нет такого файла или каталога. Поэтому я удивляюсь, что я даю правильный путь. Я пытаюсь fopen (./ data/fileName.txt, «r»), fopen (data/filename) оба результата
Я пытаюсь получить текущий рабочий каталог и добавить к нему «data/filename.txt»:
char cpath[1024];
getcwd(cpath, sizeof(cpath));
strcat(cpath,"/data/records_file.txt");
printf("\nfull path is : %s\n",cpath);
, а затем сделать:
FILE * fp = fopen(cpath,"r");
, но до сих пор получить код ошибки 2 на самом деле, если я пытаюсь сделать Еореп (justName.txt, «г») Я все еще получаю нуль возвращается и ошибка 2, так что должно быть что-то основное, что я потерял. Что можно сделать для создания файла и заставить его работать?
Вы не можете 'fopen (...," r ")' несуществующий файл. Для этого вам нужно '' w ''или' ". – EOF
Или даже «w +» для чтения и записи, но любой существующий файл уничтожен. –