San
San

Reputation: 169

permission denied for rename function in C on windows

I have an application developed in C. This application is supported across multiple platforms. There is one functionality where we are transferring files via file transfer protocol to different machine or to any other directory on local machine. I want to include a functionality where I can transfer the file with some temporary name and once the transfer is complete, I want to rename the file with the correct name (the actual file name).

I tried using simple rename() function. It works fine in Unix and Linux machines. But it does not work on Windows. It is giving me an error code of 13(Permission denied error).

First thing, I checked in msdn to know the functionality of rename if I have to grant some permissions to the file etc.

  1. I granted full permissions to the file (lets say it is 777).
  2. I read in few other posts that I should close the file descriptor before renaming the file. I did that too. It still gives the same error.
  3. Few other posts mentioned about the owner of the file and that of the application. The application will run as a SYSTEM user. (But this should not affect the behavior, because I tried the same rename function in my application as follows:

This works fine from my application:

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

but

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

doesn't work, where My_path when printed displays C:/abc/test.txt.

How can I rename a file? I need it to work on multiple platforms. Are there any other things I should be trying to make it work.?

Upvotes: 3

Views: 5444

Answers (2)

Keith Morgan
Keith Morgan

Reputation: 741

I had this same problem, but the issue was slightly different. If I did the following sequence of function calls, I got "Permission Denied" when calling the rename function.

fopen
fwrite
rename
fclose

The solution was to close the file first, before doing the rename.

fopen
fwrite
fclose
rename

Upvotes: 4

Ivan
Ivan

Reputation: 638

If

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

works but

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

does not, in the exact same spot in the program (i.e. replacing one line with another and making no changes), then there might be something wrong with the variable My_path. What is the type of this variable? If it is a char array (since this is C), is it terminated appropriately? And is it exactly equal to "C:/abc/aaa.txt"?

(I wish I could post this as a comment/clarification rather than as an answer but my rep isn't good enough :( )

Upvotes: 1

Related Questions