【问题标题】:Unable to create file on Mac in C?无法用 C 在 Mac 上创建文件?
【发布时间】:2021-02-17 05:04:53
【问题描述】:

我正在尝试在 Mac 上的此文件夹 /Users/xxx/yyy/zzz/priya 中创建一个文件。

FILE *f;
f = fopen("/Users/xxx/yyy/zzz/priya/program.txt", "w");
if (f == NULL) {
  printf("unable to open ");
} else {
  fprintf(f, "log presents ...\n");
}

但每次我“无法打开”。所有文件夹都有读写权限。但不能给Macintosh HD读写权限。这是不创建文件的原因吗?任何提示都会对我有所帮助。

【问题讨论】:

  • /Users/xxx/yyy/zzz/priya 的权限是什么?您的程序中的路径也与您的问题陈述中的路径不匹配?您能否为正确的目录显示ls -l 的实际输出?你也以用户 xxx 的身份运行程序吗?
  • /Users/xxx/yyy/zzz 是有效路径吗?
  • fopen 将分配errno。您可以检查它以查看呼叫失败的原因。例如:if( (f=fopen(path, mode)) == NULL) { perror(path);}

标签: c macos


【解决方案1】:

解决方案在 cmets 中,这是使用 Mac OSX mkdir() 的替代方法。它显示了如何在路径中创建每个子目录。

在调用fopen()之前,将路径解析为字符串数组,

char folder[n][MAX_LEN] = {"Users","xxx","yyy","zzz","priya"}

然后通过遍历所有组件目录来验证/创建每个段是否存在:

(请考虑以下伪代码,因为我从编译器发布并且未经测试...)

struct stat st = {0};
len = strlen("/Users/xxx/yyy/zzz/priya");  //length of original path string  
char newDir[len+1];
int status = -1;
memset(newDir, 0, sizeof(newDir));   
for(int i=0;i<n;i++)
{ 
    strcat(newDir, "/");
    strcat(newDir, folder[i])
    status = mkdir(newDir, 0700);
    if ((status != 0) && (errno != EEXIST)) 
    {
         //handle error and exit
         break;   
    }
}

【讨论】:

  • 无需调用stat。请继续致电mkdir。也就是说,无论如何,如果 mkdir 失败,请检查 errno
  • @user58697 - 好点,编辑为只使用'mkdir'
猜你喜欢
  • 2013-10-26
  • 2015-09-19
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-03
相关资源
最近更新 更多