2012-05-22 88 views
0

出於某種原因,安裝此程序的用戶在點擊按鈕時沒有任何反應。另外,如果我嘗試並捕獲,它說該文件已經存在,並且它不。子文件夾是,但不是文件。哪裏不對?這裏是我的代碼:將文件移動到C#中的子文件夾的麻煩?

  string pathUser4 = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); 
      string pathDownload4 = (pathUser4 + @"\Downloads\"); 
      string sourceFile = pathDownload4 + listBox1.Text; 

      string pathdoc5 = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
      string pathDownload5 = (pathdoc5 + @"\iracing\setups\"); 
      string destinationFile = pathDownload5 + comboBox1.Text; 

      File.Move(sourceFile, destinationFile); 
     } 
     catch { } 
      if (comboBox1.Text == "Select File Destination") 
      { 
       MessageBox.Show("Please Select A Destination Folder", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
+4

對於編碼風格,請使用Path.Combine創建路徑。 'string pathDownload4 = Path.Combine(pathUser4,「Downloads」);' – MichelZ

+0

由於某種原因不起作用。它給了我錯誤的目錄,並且由於某種原因取消了用戶配置文件....那不是什麼問題......我知道 –

+0

我知道這不是錯誤的部分,只是爲了更好的編碼風格。 在使用Path.Combine時不要使用斜槓,我想。 (所以你的@「\ Downloads」變成「Downloads」) – MichelZ

回答

0

我想你的第一個問題是你的檢查comboBox1.Text一個適當的值之後,你已經嘗試移動文件。

第二次使用MichelZ建議的Path對象。這很容易,不應該引起任何問題。

這裏是你的代碼將與變化,如:

 // TODO: check for listBox1.Text to be blank or non-file 

     if (comboBox1.Text == "Select File Destination") 
     { 
      MessageBox.Show("Please Select A Destination Folder", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 

     string sourceFile = Path.Combine(Environment.SpecialFolder.UserProfile, "Downloads", listBox1.Text; 
     string destinationFile = Path.Combine(Environment.SpecialFolder.MyDocuments, "iracing", "setups", comboBox1.Text; 
     File.Move(sourceFile, destinationFile); 
    } 
    catch { } 
0

驗證變量sourceFile的內容和destinationFile(通過調試),或者是承擔聯合工作如你所期望?

另外,請告訴我,您非常清楚此實施所帶來的注入風險,並確保您仔細驗證listBox1comboBox1值。

+0

是的,我檢查了一切 –

+0

是的,我猜測...但我有一個朋友安裝軟件並測試它 –

+0

不要猜測,_validate_。你可以自由部署修改版本嗎?將值寫入日誌文件,或者如果必須返回頁面,只需查找_certain_這些值是什麼。 – Snixtor

0

首先,同一目錄中的文件和目錄的名稱不能完全相同。 在Windows中,目錄和文件的名稱不是一個單獨的屬性。 您的評論給了我一個這樣的暗示。因此,你從.NET獲得的例外是準確的。

這個問題與try-catch塊無關,似乎你在指責它。知道你的錯誤總是一個好主意。

一種編碼方法是檢查File.Move,一個古老的時尚方法:)

+0

好吧,它是說文件已經在那裏,但它不是。 –

+0

但是該目錄的名稱與您的文件相同。對不起,我不清楚這一點。根據我的說法,「目錄和文件的名稱並不明確」。 –

+0

這是Windows系統的一個限制,甚至在DOS 3.1之前,甚至在你活過很久之前,嘿嘿。 –

0

要明白的地方File.Move之前是問題之前,文件/目錄是否存在,可以使用它

Debug.Assert的(!File.Exists(destinationFile)的String.Format( 「文件已經存在:{0}」,destinationFile))

如果您不能調試,您可以顯示與一個MessageBox等同目的

+0

我把這個放在哪裏? –

+0

就在行之前,您調用File.Move –

+0

它需要System.Diagnostics並在Debug模式下運行該程序 –

相關問題