jel
jel

Reputation:

File Access Denied

I am using an FTPClient library to transfer files from a Windows share to an FTP server.

The SendFile method of the library uses the following code:

FileStream stream = new FileStream(localFileName, FileMode.Open);

This results in a System.UnauthorizedAccessException being thrown, however I am able to open, rename, and move the file using Windows Explorer under the same user account which the code is being executed.

Can anyone tell me why this is happening?

Edit:

The strange thing is that I can access other files on the share which have been granted the same NTFS permissions as the one that I can't.

This is also a Windows forms app.

Update:

Still no luck with this. I am able to read the file using a StreamReader but not a file stream. I can't understand why the two behave differently.

Upvotes: 10

Views: 24653

Answers (5)

abmv
abmv

Reputation: 7098

1) NTFS permissions on the physical directory using explorer

2) Within the IIS MMC console FTP Site to allow read/write on the FTP folder

3) Ensure that the FTP Site or virtual directory actually exists, when checking the above step

http://www.eggheadcafe.com/forumarchives/inetserveriisftp/Jan2006/post25322215.asp

Upvotes: 0

fretje
fretje

Reputation: 8372

Are you sure it's the same user account? Can you try something like

MessageBox.Show(WindowsIdentity.GetCurrent().Name);

?

Also, are you sure the file isn't read-only? Do you need write access to the file? Otherwise you could try:

FileStream stream = new FileStream(localFileName, FileMode.Open, FileAccess.Read);

Upvotes: 28

Chernikov
Chernikov

Reputation: 857

It's near FileSecurity class.

See at FileSecurity class

and try:

        // Get a FileSecurity object that represents the
        // current security settings.
        FileSecurity fSecurity = File.GetAccessControl(localFileName);

        // Add the FileSystemAccessRule to the security settings.
        fSecurity.AddAccessRule(new FileSystemAccessRule("DOMAIN\USERNAME",
            FileSystemRights.ReadData, AccessControlType.Allow));

        // Set the new access settings.
        File.SetAccessControl(localFileName, fSecurity);

Upvotes: 0

cjk
cjk

Reputation: 46425

Is your project being run from a network drive? If so that that will mean it runs in a restricuted priviliges mode that could cause this. Try copying the project to your C drive and running it again.

Upvotes: 0

simon831
simon831

Reputation: 5476

The process that is running your code does not have permissions on the file. Is it part of a web application - if so you need to give access to the ASPNET account.

Give permission to 'everyone' on the file, and see if it still has problems.

Upvotes: 1

Related Questions