gpt4 book ai didi

C fopen 不新建文本文件,返回null,错误码2

转载 作者:太空宇宙 更新时间:2023-11-04 03:25:27 25 4
gpt4 key购买 nike

这是程序:

#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();
}

我试图用 C 语言制作一个程序,在目录“data”中创建一个名为“records_file”的文本文件。 “数据”目录位于包含该程序源代码和exe的工作目录中。

程序首先检查文件和数据目录是否存在,如果存在则打印出确认字符串。这很好用。当我从数据目录中删除文本文件时,程序调用 fopen 函数(我环顾四周,fopen 似乎是创建文件的标准方式 - 有不同的方式吗?)

但是函数返回的结果是null,查看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实际上,如果我尝试执行 fopen(justName.txt,"r"),我仍然会返回 null 和错误 2,因此我一定缺少一些基本的东西。可以做些什么来创建文件并让 fopen 工作?

最佳答案

如果你想写一个文件,就像你想做的那样:

FILE * fp = fopen("data/records_file.txt","r");

FILE * fp = fopen("./data/records_file.txt","r");

FILE * fp = fopen(cpath,"r");

您需要将 “r”(表示“读取”)更改为 “w”(表示“写入”)或 “a”(用于“追加”)。您可以在 man page 了解有关 fopen() 的更多信息.

关于C fopen 不新建文本文件,返回null,错误码2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41537568/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com