Доступ к файлу запрещен
Я использую библиотеку FTPClient для передачи файлов из общего ресурса Windows на FTP-сервер.
Метод SendFile библиотеки использует следующий код:
FileStream stream = new FileStream(localFileName, FileMode.Open);
В результате возникает исключение System.UnauthorizedAccessException, однако я могу открывать, переименовывать и перемещать файл с помощью проводника Windows под той же учетной записью пользователя, которая выполняется в этом коде.
Может ли кто-нибудь сказать мне, почему это происходит?
Edit:
Странно, что я могу получить доступ к другим файлам на общем ресурсе, которым были предоставлены те же разрешения NTFS, что и тот, который я не могу.
Это также приложение форм Windows.
Update:
По-прежнему не повезло. Я могу прочитать файл, используя StreamReader
, но не поток файлов. Я не понимаю, почему они ведут себя по-другому.
Ответы
Ответ 1
Вы уверены, что это одна и та же учетная запись пользователя?
Можете ли вы попробовать что-то вроде
MessageBox.Show(WindowsIdentity.GetCurrent().Name);
?
Также вы уверены, что файл не доступен только для чтения? Вам нужен доступ на запись к файлу?
В противном случае вы можете попробовать:
FileStream stream = new FileStream(localFileName, FileMode.Open, FileAccess.Read);
Ответ 2
Процесс, выполняющий ваш код, не имеет прав доступа к файлу.
Является ли это частью веб-приложения - если вам нужно предоставить доступ к учетной записи ASPNET.
Дайте разрешение "всем" в файле и посмотрите, есть ли у него проблемы.
Ответ 3
1) Разрешения NTFS для физического каталога с помощью проводника
2) В консоли FTP-узла консоли MMC для IIS для чтения/записи в папке FTP
3) Убедитесь, что FTP-сайт или виртуальный каталог действительно существует, при проверке вышеописанного шага
http://www.eggheadcafe.com/forumarchives/inetserveriisftp/Jan2006/post25322215.asp
Ответ 4
Выполняется ли ваш проект с сетевого диска? Если это так, что это будет означать, что он работает в ограниченном режиме priviliges, который может вызвать это. Попробуйте скопировать проект на ваш диск C и запустить его снова.
Ответ 5
Он находится рядом с классом FileSecurity.
Смотрите класс 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);