C-无法从Xcode创建新的.txt文件

C-无法从Xcode创建新的.txt文件,c,xcode,file,fopen,C,Xcode,File,Fopen,我刚开始使用Xcode进行C编程。但我现在有个问题。我写了这段代码: #include <stdio.h> #include <stdlib.h> int main(int argc, const char * argv[]) { FILE *fp; fp = fopen("toto.txt", "w+"); fputs("hi", fp); fclose(fp); return 0; } 由于toto.txt不存在,它

我刚开始使用Xcode进行C编程。但我现在有个问题。我写了这段代码:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char * argv[]) {

    FILE *fp;

    fp = fopen("toto.txt", "w+");
    fputs("hi", fp);

    fclose(fp);

    return 0;
}
由于toto.txt不存在,它应该创建并打开它,但什么也没有发生,我不知道为什么。

检查fopen的返回值。创建文件可能会失败。原因可能是某些权限。您应该检查应该写入文件的当前目录,或者为文件名添加完整路径

int main(int argc, const char * argv[])
{
  FILE *fp;
  fp = fopen("/mydir/toto.txt", "w+");
  if (fp != NULL)
  {
    fputs("hi", fp);
    fclose(fp);
  }
  else {
    printf("Failed to create the file.\n")
  }
  return 0;
}
检查fopen的返回值。创建文件可能会失败。原因可能是某些权限。您应该检查应该写入文件的当前目录,或者为文件名添加完整路径

int main(int argc, const char * argv[])
{
  FILE *fp;
  fp = fopen("/mydir/toto.txt", "w+");
  if (fp != NULL)
  {
    fputs("hi", fp);
    fclose(fp);
  }
  else {
    printf("Failed to create the file.\n")
  }
  return 0;
}

我认为您的问题在于Xcode当前的工作目录设置。您需要更新项目的当前方案

停止运行应用程序。 进入产品->方案->编辑方案。 从左面板->选项中选择运行,然后选中工作目录-使用自定义工作目录。
现在,您的C项目将知道应该在哪里写入输出文件。

我认为您的问题在于Xcode当前的工作目录设置。您需要更新项目的当前方案

停止运行应用程序。 进入产品->方案->编辑方案。 从左面板->选项中选择运行,然后选中工作目录-使用自定义工作目录。
现在,您的C项目将知道应该在哪里写入输出文件。

您是否检查了fopen是否返回了有效的文件句柄?它可能无法将文件创建到当前目录。您确定要在正确的位置查找文件吗?如果您在XCode中运行,默认工作目录位于生成文件夹中,而不是源文件夹中。例如,这可能是权限问题。是否确实允许您在此目录中创建文件?@Almeida不是权限问题,我拥有目录中的所有权限。如果NULL==fp{//failed},是否检查fopen是否返回有效的文件句柄?它可能无法将文件创建到当前目录。您确定要在正确的位置查找文件吗?如果您在XCode中运行,默认工作目录位于生成文件夹中,而不是源文件夹中。例如,这可能是权限问题。是否确实允许在此目录中创建文件?@Almeida不是权限问题,我拥有目录中的所有权限。如果NULL==fp{//failed},我只是根据我的文件和目录稍微更改了代码:控制台消息:创建文件失败。int mainit argc,const char*argv[]{FILE*fp;fp=fopen/Fichiers/toto.txt,w+;if fp!=NULL{fputshi,fp;fclosefp;}否则{printfailed以创建文件。\n;}返回0;}但它仍然不能工作,我不知道为什么!虽然我已经使用这个方法更改了权限:我只是根据我的文件和目录稍微更改了您的代码:控制台消息:未能创建文件。int mainit argc,const char*argv[]{FILE*fp;fp=fopen/Fichiers/toto.txt,w+;if fp!=NULL{fputshi,fp;fclosefp;}否则{printfailed以创建文件。\n;}返回0;}但它仍然不能工作,我不知道为什么!当我使用此方法更改权限时: