2

我有一个用 C 开发的应用程序。这个应用程序支持跨多个平台。有一个功能是我们通过文件传输协议将文件传输到不同的机器或本地机器上的任何其他目录。我想包含一个功能,我可以用一些临时名称传输文件,一旦传输完成,我想用正确的名称(实际文件名)重命名文件。

我尝试使用简单的 rename() 函数。它在 Unix 和 Linux 机器上运行良好。但它不适用于 Windows。它给了我一个错误代码 13(权限被拒绝错误)。

首先,如果我必须授予文件某些权限等,我在 msdn 中签入以了解重命名的功能。

  1. 我授予了文件的完全权限(假设它是 777)。
  2. 我在其他几篇文章中读到我应该在重命名文件之前关闭文件描述符。我也这样做了。它仍然给出同样的错误。
  3. 很少有其他帖子提到文件的所有者和应用程序的所有者。该应用程序将以 SYSTEM 用户身份运行。(但这不应该影响行为,因为我在我的应用程序中尝试了相同的重命名函数,如下所示:

这在我的应用程序中运行良好:

rename("C:/abc/aaa.txt","C:/abc/zzz.txt");

rename(My_path,"C:/abc/zzz.txt");

不起作用,My_path打印时显示在哪里C:/abc/test.txt

如何重命名文件?我需要它在多个平台上工作。还有什么其他的事情我应该努力让它发挥作用吗?

4

2 回答 2

4

我有同样的问题,但问题略有不同。如果我执行了以下函数调用序列,则在调用重命名函数时得到“权限被拒绝”。

fopen
fwrite
rename
fclose

解决方案是在重命名之前先关闭文件。

fopen
fwrite
fclose
rename
于 2012-11-14T16:33:55.063 回答
1

如果

rename("C:/abc/aaa.txt","C:/abc/zzz.txt");

有效,但

rename(My_path,"C:/abc/zzz.txt");

没有,在程序的完全相同的位置(即用另一行替换并且不做任何更改),那么变量 My_path 可能有问题。这个变量的类型是什么?如果它是一个 char 数组(因为这是 C),它是否适当地终止了?它是否完全等于“C:/abc/aaa.txt”?

(我希望我可以将此作为评论/澄清而不是作为答案发布,但我的代表还不够好:()

于 2012-08-07T07:12:24.987 回答