Доступ к файлу запрещен

Я использую библиотеку 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);