2009-06-17 3 views
10

Я использую библиотеку FTPClient для передачи файлов из общего ресурса Windows на FTP-сервер.File Access Denied

Метод SendFile библиотеки использует следующий код:

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

Это приводит к System.UnauthorizedAccessException быть брошенным, однако я могу открыть, переименовать и переместить файл с помощью проводника Windows, под той же учетной записи пользователя, которую выполняет код.

Может ли кто-нибудь сказать мне, почему это происходит?

Edit:

Самое странное, что я могу получить доступ к другим файлам на долю которых были предоставлены те же права доступа NTFS, как тот, который я не могу.

Это также приложение для форм Windows.

Update:

Еще не повезло с этим. Я могу прочитать файл, используя StreamReader, но не поток файлов. Я не могу понять, почему они ведут себя по-другому.

+0

вы называете это из приложения 'Windows Forms', или на странице ASP.NET? – russau

+0

из окна форм приложение – 2009-06-17 10:15:09

+1

любой шанс, что вы используете приложение из общей папки? Я знаю .net (по умолчанию) уменьшает разрешения приложения, когда вы это делаете. – russau

ответ

0

разрешения 1) NTFS на физический каталог с помощью проводника

2) В MMC IIS консоли FTP-сайта, чтобы позволить чтение/запись на папку FTP

3) Убедитесь в том, что FTP сайта или виртуальный каталог на самом деле существует, то при проверке указанной выше стадии

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

+0

Я считаю, что ошибка происходит при открытии файла до его отправки? то есть права доступа к FTP-сайту в данный момент не будут фактором. – russau

1

процесс, который работает ваш код не имеет разрешения на файл. Является ли это частью веб-приложения - если вам нужно предоставить доступ к учетной записи ASPNET.

Дайте разрешение «всем» на файл и посмотрите, есть ли у него проблемы.

0

Ваш проект запущен с сетевого диска? Если это так, что это будет означать, что он работает в ограниченном режиме priviliges, который может вызвать это. Попробуйте скопировать проект на ваш диск C и снова запустить его.

+0

Нет, я запускаю его в режиме отладки из visual studio из каталога локальных проектов по умолчанию. Я пытаюсь получить доступ к файлу через его путь UNC, например. \\ server \ share \ file, но по мере того, как у меня есть правильные разрешения (у меня есть полный доступ), это не должно быть проблемой? – 2009-06-17 10:20:11

27

Уверены, что это та самая учетная запись пользователя? Вы можете попробовать что-то вроде

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

?

Кроме того, вы уверены, что файл не доступен только для чтения? Вам нужен доступ на запись к файлу? В противном случае вы можете попробовать:

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

Да такой же счет. – 2009-06-17 10:23:19

+12

Спасибо за ваш ответ. Мой файл был доступен только для чтения, но поскольку я не запрашивал доступ на запись, я предположил, что для определения файла FileAccess.Read не было необходимости. Я был неправ. Добавление FileAccess.Read было ключевым. –

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); 
+0

Это приводит к: Необработанному Исключение: System.Security.Principal.IdentityNotMappedException: Некоторый или все ссылки на идентификаторы не могут быть переведены. В эту настройку входят доверительные отношения домена, например, я являюсь членом группы в другом домене, которому предоставляется доступ к этому файлу, интересно, оказывает ли это влияние на это. – 2009-06-17 10:40:49

+0

Вы изменили строку "DOMAIN \ USERNAME"? – Chernikov

+0

oops Я сделал, но забыл избежать «\», теперь он отлично работает, но я все еще не могу получить доступ к файлу. – 2009-06-17 11:32:26