【问题标题】:Cannot open particular file name to append无法打开要附加的特定文件名
【发布时间】:2012-05-17 17:08:39
【问题描述】:

我有一些代码迭代地将数据附加到文件中,看起来类似于:

for(int i=0; i<number; i++){
  FILE *log_file;
  char name[50];
  sprintf(name,"something_%d.log",i);
  log_file=fopen(name,"a");
  if(log_file == NULL){
    printf("ERROR cannot open file %s",name);
    abort();
  }
  /* Write stuff to file */
  fclose(log_file);
}

看起来很简单吧?如果文件存在并且我有权写入它,它会正常进行;如果文件不存在并且我有权在目录中写入文件,它会正常创建文件。错误的!不知何故,当我遇到特定文件名 (MINI_3f_1_0.log) 时,程序无法创建/打开文件并产生 log_file = NULL。显然这不是我的全部代码,最糟糕的是我无法用如图所示的简单程序重现这个问题。

我已经花了几个小时试图追查到底发生了什么,到目前为止,我 100% 确信以下几点:

  1. 文件在同一范围内声明、打开和关闭
  2. 同名文件未在任何其他函数/整个程序中打开
  3. 我有权在目录中读/写
  4. 尝试不按迭代顺序打开文件在同一例程中完成时会产生相同的错误

你们可以给我的任何指导将不胜感激。如果您在体验中遇到过类似的情况,您是如何解决的?

【问题讨论】:

  • 在 fopen() 之后使用 setbuf()。这与您的问题无关,您应该这样做。
  • 为什么不尝试使用errnoperror 来查找更详细的失败原因?
  • errno 说“没有这样的文件或目录”
  • 尝试在不同的目录中运行它?您的系统日志中有任何内容吗?
  • @Mat 成功了。为什么?注意:我使用的是 Red Hat,并且我的目录位于 AFS 上,尽管这在 AFS 和本地磁盘上使用不同的目录都有效。

标签: c file-io printf


【解决方案1】:

正如 Mat 在 cmets 中所建议的那样,在不同的目录中运行代码不会产生错误。文件系统可能有问题,需要系统管理员检查。

【讨论】:

    猜你喜欢
    • 2017-03-12
    • 2014-10-21
    • 2021-09-30
    • 1970-01-01
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-02
    相关资源
    最近更新 更多