2010-09-20 18 views
0

我已經寫了代碼移動文件如下獲得個例外,「參數不正確。 r n」,而移動文件

  private void Move_Click(object sender, EventArgs e) 
    { 
     string strOrgpath = string.Empty, strNewpath = string.Empty; 
     strOrgpath = tvwACH.SelectedNode.ToString(); 
     string strPath = strOrgpath.Substring(10); 
     FolderBrowserDialog folderborwser1 = new FolderBrowserDialog(); 

     if (folderborwser1.ShowDialog() == DialogResult.OK) 
     { 
      try 
      { 
       strNewpath = folderborwser1.SelectedPath; 
       File.Move(strPath, strNewpath); 
      } 
      catch (Exception ex) 
      { 

      } 
     } 

    } 

但我得到的例外,因爲我提到可以在任何一個告訴爲什麼和有時我得到錯誤,因爲訪問路徑被拒絕

+0

你檢查了strPath和strNewPath的值,以確保它們看起來正確的File.Move?你能告訴我們這些價值觀的例子嗎? – Chris 2010-09-20 14:11:05

回答

1

確保您的子字符串調用返回正確的結果。如果可能,請改用Path類的靜態方法。查看File.Move的MSDN頁面,並注意預期的參數 - 您應提供兩個有效的完整文件名(例如C:\Blah\myFile.txt)。

如果用戶在文件夾瀏覽器對話框中選擇了一個他們沒有寫權限的文件夾,則可能會發生「訪問被拒絕」錯誤消息。這是您必須在代碼中處理的情況,可能是通過捕獲UnauthorizedAccessException

更新:目標文件還應該指向一個文件名。所以你需要做這樣的事情:

var origFileName = Path.GetFileName(strPath); 
strNewpath = Path.Combine(folderborwser1.SelectedPath, origFileName); 
File.Move(strPath, strNewpath); 
+0

我的子字符串正在返回正確的結果只有我得到的路徑爲「c:\ some.txt」,我想將此移動到一些用戶從folderbrowserdialog中選擇的其他目的地 – Dotnet 2010-09-20 14:20:41

+0

移動的目的地也應該是文件名。我更新了我的答案以包含一些示例代碼。 – 2010-09-20 14:24:40

+0

感謝您給出一個想法:) – Dotnet 2010-09-20 14:40:45

0

沒有看到您的應用程序在運行時使用的值,我猜tvwACH.SelecteNode.ToString()strOrgpath.Substring(10)是不是一個有效的文件系統路徑。

你應該調試你的應用程序並設置一個斷點來查看這些值是什麼(如果在這一點上你不明白你的問題是什麼,那麼發佈它們)。

+0

我正確地得到了這些值。初始路徑將是treenode,所以我已採取的子字符串,並分配給另一個字符串 – Dotnet 2010-09-20 14:14:19

相關問題