2011-11-16 61 views
0

我有一個程序,將文件或文件夾重命名爲小寫名稱。文件或文件夾重命名爲小寫在C#中使用DirectoryInfo/FileInfo.MoveTo()

我寫了這個代碼:

private void Replace(string FolderLocation, string lastText, string NewText) 
    { 
     if (lastText == "") 
     { 
      lastText = " "; 
     } 
     if (NewText == "") 
     { 
      NewText = " "; 
     } 

     DirectoryInfo i = new DirectoryInfo(FolderLocation); 
     string NewName = ""; 
     if (checkBox2.Checked) 
     { 
      if (i.Parent.FullName[i.Parent.FullName.Length - 1].ToString() != "\\") //For parents like E:/ 
      { 
       NewName = i.Parent.FullName + "\\" + i.Name.Replace(lastText, NewText); 
      } 
      else 
      { 
       NewName = i.Parent.FullName + i.Name.Replace(lastText, NewText); 
      } 

       NewName = NewName.ToLower(); 


      if (NewName != i.FullName) 
      { 
       i.MoveTo(NewName); 
      } 
      foreach (DirectoryInfo sd in i.GetDirectories()) 
      { 
       Replace(sd.FullName, lastText, NewText); 
      } 
     } 
     if (checkBox1.Checked) 
     { 
      foreach (FileInfo fi in i.GetFiles()) 
      { 
       NewName = fi.Directory + "\\" + fi.Name.Replace(lastText, NewText); 

        NewName = NewName.ToLower(); 

       if (NewName != fi.FullName) 
       { 
        fi.MoveTo(NewName); 
       } 
      } 
     } 
    } 

,但我得到一個異常: 「源和目標路徑必須是不同的」

我該如何解決這個問題?

+3

就文件名而言,Windows不區分大小寫。 – Oded

+0

ok.but它如何顯示文件名? –

+0

它使用保存的內容。但是,在比較文件名時 - 「FILENAME」==「文件名」==「文件名」',就其而言。 – Oded

回答

4

由於Windows不區分大小寫,就文件名而言,您需要將文件重命名爲臨時名稱,然後使用小寫字符重新命名。

+0

現在我得到了「訪問被拒絕」eception.but我運行它作爲管理員。發生了什麼? –

+0

@ahmadalishafiee - 「訪問被拒絕」總是意味着缺乏權限。確保路徑被允許執行應用程序的用戶(可能是您的用戶)。 – Oded

+0

這意味着無法訪問程序的文件/文件夾,但我想發佈我的程序。如何修復此錯誤? –

2

雖然Windows文件系統存儲名稱的情況下,senstivie他們的行爲不區分大小寫的名稱比較這樣的重命名操作將無法正常工作......

如果你真的需要/想這樣做,你需要先重新命名暫時將文件/目錄設置爲不同且唯一的內容,然後將其重命名爲「返回」爲所需的「小寫名稱」。

僅供參考,請參閱http://msdn.microsoft.com/en-us/library/ee681827%28v=vs.85%29.aspxhttp://support.microsoft.com/kb/100108/en-us

如果您需要NTFS區分大小寫,您可以將dword ObCaseInsensitiveHKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\設置爲0(不推薦!)。

如果您正在處理NFS,請參閱http://technet.microsoft.com/en-us/library/cc783185%28WS.10%29.aspx

0

不幸的是,這是一個窗口問題,因爲它是不區分大小寫的,因爲Oded在評論中提到。你需要做的是重命名文件夾兩次。通過將文件夾移動到新的臨時名稱,然後回到原始名稱的小寫字母。

+1

這不是Windows問題,這是一個.Net問題。 Win32的MoveFileEx支持僅案例重命名; .Net得到這個錯誤。 – antiduh