为什么rename()和remove()函数不起作用?

时间:2016-06-21 15:00:11

标签: c file file-rename

如果我单独使用此代码(使用主函数),则可以正常工作。

但是当我在我的项目中包含此函数时,它会提供两个文件:

df[{ cond2 = which(Cond == 2); unlist(Map(function(t1, t2) if(t1 %in% cond2) t1:t2 else NULL, which(Time1 == "Start"), which(grepl("Stop", Time2)))) }] annuaire_client.txt

使用的代码如下:

annuaire1.txt

3 个答案:

答案 0 :(得分:1)

您应该检查删除和重命名的返回值:

    if (remove("annuaire_client.txt") != 0) {
        /* handle error */
    }
    if (rename("annuaire1.txt","annuaire_client.txt") == -1) {
        /* handle error */
    }

许多可能性之一是在调用remove时保持主函数打开描述符。请务必将所有fopenfclose配对,或者即使您unlink / remove路径仍然保留(已删除)描述符,您的进程仍会保持(已删除)描述符可能会导致致命错误分配给它的描述符的限制(fopen将失败 - 这在今天发生在我身上,所以它不是纯粹的人为情况)。还要记住,特别是在无效指针上调用fclose是未定义的行为,即不是FILE*

答案 1 :(得分:1)

您可以尝试检查功能的结果代码。 例如,对于rename函数,您可以使用以下代码:

   #include <errno.h>

(...)

   int ret;

   ret = rename("annuaire1.txt", "annuaire_client.txt");

   if(ret == 0) 
   {
      printf("File renamed successfully");
   }
   else 
   {
      printf("Error: unable to rename the file");
      fprintf(stderr, "System error (%d): %s\n", errno, strerror(errno);
   }

答案 2 :(得分:0)

尝试在删除功能和重命名功能的新名称中编写文件的完整路径。 例如:

remove("C:\\Documents\\annuaire_client.txt");
rename("anuuaire1.txt","C:\\Documents\\annuaire_client.txt");

请记住使用\\而不是\