此函数无法打开文件。我的参数是否错误或者是什么导致了这个问题?
int CreateFile(const char *filename){
char filepath[strlen(filename) + 3];
sprintf(filepath, "./%s", filename);
int fd = open(filepath, O_CREAT, O_APPEND, S_IWGRP);
if(fd == -1) printf("file read failed\n");
return fd;
}
Xcode 仅将“文件读取失败”打印到控制台。我也尝试通过终端运行它,但这也没有帮助。
我修复了 NetMage 指出的问题:
int CreateFile(const char *filename){
char filepath[strlen(filename) + 3];
sprintf(filepath, "./%s", filename);
int fd = open(filepath, O_CREAT|O_APPEND, S_IWGRP);
if(fd == -1) printf("file read failed\n");
return fd;
}
不幸的是,这并没有解决问题
最佳答案
第 1 步 - 通过将其打印到终端或在调试器中检查来验证 filepath
设置是否正确。
第 2 步 - 验证该文件是否存在于该路径中,并且其权限是否已设置以便您可以打开它。如果filepath
是“./foo”
,那么名为foo
的文件最好存在于当前工作目录 (运行程序的目录),并且它至少需要具有读取权限。
步骤 3 - 如果该文件不存在,请验证您是否有权在当前工作目录中创建新文件。
第 4 步 - 如果完成所有这些操作后仍然出现错误,请检查 errno
。除了“它不起作用”之外,它还会为您提供一些附加信息。
#include <errno.h>
...
if(fd == -1)
{
switch( errno )
{
case EACCESS: // permission issues
handle_permission_issue();
break;
case EEXIST: // file already exists and you used O_CREAT and O_EXCL
handle_already_exists_issue();
break;
case EFAULT: // bad path
handle_bad_path_issue()
break;
...
}
printf("file read failed\n");
}
NetMage 指出了一个问题 - 您的标志需要按位或组合在一起,而不是作为单独的参数列出。令人惊讶的是编译器没有因此对你大喊大叫。
关于C open() 函数失败。难道是我的参数不对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47022712/