2013-12-10 7 views
0

У меня есть этот код, который загружает файл с ftp-сервера, а затем создает этот файл в установленном пути.UnauthorizedAccessException при создании файла

string inputfilepath = @"C:\Users\me\Documents\Test"; 
     string ftphost = "ftp_server"; 
     string ftpfilepath = @"/TestDOTNET/text.TXT"; 

     string ftpfullpath = "ftp://" + ftphost + ftpfilepath; 

     using (WebClient request = new WebClient()) 
     { 
      request.Proxy = null; 
      request.Credentials = new NetworkCredential("user", "pass"); 
      byte[] fileData = request.DownloadData(ftpfullpath); 

      File.SetAttributes(inputfilepath, FileAttributes.Normal); 

      using (FileStream file = File.Create(inputfilepath)) // this is the line where I get the exception 
      { 
       file.Write(fileData, 0, fileData.Length); 
       file.Close(); 
      } 
      MessageBox.Show("Download Complete"); 

     } 

Я попытался создать app.manifest и установить уровень requestedExcetuion в requireAdministrator, но все еще не получил никаких изменений.

Спасибо за ваше время

+1

Я думаю, что ваш «входной путь» - это каталог, который явно доступен только для чтения. – Abhineet

+0

@Abhineet, вы так правы! Я устанавливаю в свойствах папки только для чтения, но когда я закрываю и снова открываю окно свойств, оно все еще доступно только для чтения. Как я могу отменить это? – Marek

+0

Программируется или вручную? – Abhineet

ответ

1

Вы должны первый тест на путь к каталогу, если он существует, или нет, если да, то отрицайте атрибут read-only для этого каталога. Если нет, то создайте каталог, а затем создайте test.txt для записи в нем. Ex ::

string inputdirpath = @"C:\Users\me\Documents\Test"; 
string inputfilepath = inputdirpath + "\text.TXT"; 

// Downloading Stuff 
if(Directory.Exists(inputdirpath)) 
{ 
    var di = new DirectoryInfo("inputfilepath "); 
    di.Attributes &= ~FileAttributes.ReadOnly; 

    using (FileStream file = File.Create(inputfilepath)) 
      { 
       file.Write(fileData, 0, fileData.Length); 
       file.Close(); 
      } 
      MessageBox.Show("Download Complete"); 
} 
else 
{ 
    // Create Directory 
    // Set Attributes 
    // Create file 
    // Write data 
} 
2

Вы уверены, что пользователь, запускающий приложение имеет доступ на запись к файловой системе?

+0

Я думаю, что это нужно упомянуть как комментарий, но. В папке я могу создавать, редактировать, копировать все, что захочу. Я думаю, у меня есть все права на запись в эту папку. – Marek

2

Вы должны убедиться, что эффективный пользователь, выполняющий приложение, который обычно является другим пользователем (например, пользователем NETWORK SERVICE) от вас, имеет соответствующие права.

  • Проверка на параметры пула приложений IIS, который пользователь запуска приложения
  • Назначьте соответствующие права такого пользователя на целевой папке
Смежные вопросы