Доступ к файлу запрещен - PullRequest
10 голосов
/ 17 июня 2009

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

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

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

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

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

Edit:

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

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

Обновление:

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

Ответы [ 5 ]

28 голосов
/ 17 июня 2009

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

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

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

FileStream stream = new FileStream(localFileName, FileMode.Open, FileAccess.Read);
1 голос
/ 17 июня 2009

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

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

0 голосов
/ 17 июня 2009

Это близко к классу 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);
0 голосов
/ 17 июня 2009

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

0 голосов
/ 17 июня 2009

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

2) На FTP-сайте консоли IIS MMC разрешено чтение / запись в папке FTP

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

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

...