访问文件被拒绝

时间:2009-06-17 10:09:32

标签: c# file-io permissions

我正在使用FTPClient库将文件从Windows共享传输到FTP服务器。

库的SendFile方法使用以下代码:

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

这会导致抛出System.UnauthorizedAccessException,但是我可以使用Windows资源管理器在执行代码的同一用户帐户下打开,重命名和移动文件。

谁能告诉我为什么会这样?

修改

奇怪的是,我可以访问共享上的其他文件,这些文件已被授予与我无法获得相同的NTFS权限。

这也是一个Windows窗体应用程序。

更新

这仍然没有运气。我能够使用StreamReader但不是文件流来读取文件。我无法理解为什么两者表现不同。

5 个答案:

答案 0 :(得分:28)

您确定它是相同的用户帐户吗? 你可以尝试像

这样的东西
MessageBox.Show(WindowsIdentity.GetCurrent().Name);

另外,您确定该文件不是只读的吗?您是否需要对该文件的写入权限? 否则你可以尝试:

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

答案 1 :(得分:1)

运行代码的进程对文件没有权限。 它是Web应用程序的一部分 - 如果是这样,您需要访问ASPNET帐户。

授予文件中“所有人”的权限,并查看是否仍有问题。

答案 2 :(得分:0)

1)使用资源管理器

对物理目录的NTFS权限

2)在IIS MMC控制台FTP站点内,允许在FTP文件夹上进行读/写

3)检查上述步骤

时,确保FTP站点或虚拟目录确实存在

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

答案 3 :(得分:0)

您的项目是否从网络硬盘运行?如果是这样,那将意味着它以限制性的特权模式运行,这可能导致这种情况发生。尝试将项目复制到C驱动器并再次运行。

答案 4 :(得分:0)

它靠近FileSecurity类。

FileSecurity class

并尝试:

        // 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);