无法打开文件C

问题描述 投票:0回答:2

对于以下代码片段,我收到错误:

Unable to open file: No such file or directory

redirect_ptr 是 char** 我尝试打印redirect_ptr[0],它打印正确。知道问题出在哪里吗?

if ((in_fd = open(redirect_ptr[0], O_RDWR | O_CREAT)) == -1) {
   perror("Unable to open file");
   return -1;
}
c file-io file-descriptor
2个回答
2
投票

创建文件时,open() 需要一个附加参数,即要创建的文件的权限位。 你需要做例如

if ((in_fd = open(redirect_ptr[0], O_RDWR | O_CREAT, 0644) == -1) 

这可能不是您收到错误的原因,但是如果错误是“没有这样的文件或目录”,那么这正是错误所在,您的程序找不到该文件。

也许文件名中有一些不可打印的字符,或者名称以空格或换行符或类似字符结尾,或者名称拼写错误,或者大小写错误,或者路径是相对路径,不正确根据进程的当前工作目录匹配文件。

在一对 '' 内打印文件名通常很有帮助,这样您就可以查看是否有一些不应该出现的空格。添加一个

 printf("Filename: '%s'\n",redirect_ptr[0]);

您的代码。如果看起来不错,请在它打印出来的文件名上执行 ls -l ,站在进程的工作目录中。


0
投票

首先,使用

perror(redirect_ptr[0]);
而不是固定消息。

其次,确保父目录存在;

O_CREAT
导致最多创建一个目录条目。

第三,如果使用相对路径而不是绝对路径,请检查您是否未调用

chdir()
并使之无效。

© www.soinside.com 2019 - 2024. All rights reserved.