我有一个用C开发的应用程序。该应用程序支持多个平台。有一种功能,我们通过文件传输协议将文件传输到不同的机器或本地机器上的任何其他目录。我想要包含一个功能,我可以用一些临时名称传输文件,一旦传输完成,我想用正确的名称(实际文件名)重命名该文件。
我尝试使用简单的rename()函数。它在Unix和Linux机器上运行良好。但它不适用于Windows。它给我一个错误代码13(权限被拒绝错误)。
首先,如果我必须授予文件等一些权限,我在msdn中检查了解重命名的功能。
这可以从我的应用程序中正常工作:
rename("C:/abc/aaa.txt","C:/abc/zzz.txt");
但
rename(My_path,"C:/abc/zzz.txt");
不起作用,打印时My_path
显示C:/abc/test.txt
。
如何重命名文件?我需要它在多个平台上工作。 还有其他事情我应该努力使其发挥作用吗?
答案 0 :(得分:2)
我有同样的问题,但问题略有不同。如果我执行以下函数调用序列,则在调用重命名函数时会得到“Permission Denied”。
fopen
fwrite
rename
fclose
解决方案是在重命名之前先关闭文件。
fopen
fwrite
fclose
rename
答案 1 :(得分: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”?
(我希望我可以将此作为评论/澄清而不是作为答案发布,但我的代表不够好:()