我正在使用FTPClient库将文件从Windows共享传输到FTP服务器。
库的SendFile方法使用以下代码:
FileStream stream = new FileStream(localFileName, FileMode.Open);
这会导致抛出System.UnauthorizedAccessException,但是我可以使用Windows资源管理器在执行代码的同一用户帐户下打开,重命名和移动文件。
谁能告诉我为什么会这样?
修改
奇怪的是,我可以访问共享上的其他文件,这些文件已被授予与我无法获得相同的NTFS权限。
这也是一个Windows窗体应用程序。
更新
这仍然没有运气。我能够使用StreamReader
但不是文件流来读取文件。我无法理解为什么两者表现不同。
答案 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类。
并尝试:
// 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);