2016-01-22 39 views
-2

我有一個大的文件夾和文件目錄,其中包含名稱末尾的空格,我試圖將該空間的目錄重命名爲一個沒有,所以另一個應用程序將能夠訪問它。我不能移動/重命名空間結尾的目錄

我使用C#(但如果有更好的選擇,這將解決這個問題,請建議)這是我的全部代碼:

using System; 
using System.IO; 
using System.Text.RegularExpressions; 

namespace removing_spaces_in_directories_names 
{ 
    class Program 
    { 
     public static string path = "../../../old_directory"; 
     static void Main(string[] args) 
     { 
      DirectoryInfo di = new DirectoryInfo(path); 
      WalkDirectoryTree(di); 
      Console.ReadLine(); 
     } 

     static void WalkDirectoryTree(System.IO.DirectoryInfo root) 
     { 
      if (root.Name != "old_directory") 
      { renameDirectory(root); } 
      DirectoryInfo[] diArr = root.GetDirectories(); 
      foreach(DirectoryInfo di in diArr) 
      { 
       WalkDirectoryTree(di); 
      } 
     } 

     static void renameDirectory(System.IO.DirectoryInfo dir) 
     { 
      Console.WriteLine("renaming: " + dir.FullName); 
      string newName = ReplaceLastOccurrence(dir.FullName, " ", ""); 
      if (Directory.Exists(dir.FullName) == false) 
      { 
       //dir.MoveTo(newName); 
       String oldName = @"\\?\"+dir.FullName; 
       Directory.Move(oldName,newName); 
      } 
     } 

     public static string ReplaceLastOccurrence(string Source, string Find, string Replace) 
     { 
      int place = Source.LastIndexOf(Find); 

      if (place == -1) 
       return Source; 

      string result = Source.Remove(place, Find.Length).Insert(place, Replace); 
      return result; 
     } 
    } 
} 

我曾嘗試加入「\ \?」到年初該文件夾的名稱建議here,但這是行不通的,如果我添加它會得到的錯誤是:路徑中的非法字符

,如果我用dir.MoveTo(newName);沒有「\ \?」字符,我會得到錯誤的另一方面:找不到路徑「志願者信息」

我怎麼能經歷的一部分這是否根本?也許可以在Linux上運行這個應用程序而不是Windows幫助?

回答

0

我在一個坐在linux上運行的PHP應用程序中重寫了它。

0

對於要重命名(在這種情況下,最後刪除空格),假設你的DirectoryInfo的變量稱爲雙

你想這樣做,每個目錄:

string oldName = di.FullName; 
string newName = oldName.TrimEnd(); 
Directory.Move(oldName, newName); 
+0

我試過,但現在我得到另一個錯誤: '源和目標路徑必須different.' 如果我試圖完全改變了newName的路徑或名稱,我得到一個錯誤說: '找不到路徑的一部分' –

+0

這可能意味着oldName沒有跟蹤空間 – IsaacBok