2013-12-10 53 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

我認爲你的「inputfilepath」是一個顯然是隻讀的目錄。 – Abhineet

+0

@Abhineet你是對的!我unet在文件夾的屬性中是隻讀的,但是當我關閉並重新打開屬性窗口時,它仍然是隻讀的。我怎樣才能解決這個問題? – 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應用程序池設置是運行應用程序
  • 分配適當的權限,例如用戶在目標文件夾
相關問題