2013-10-28 205 views
1

傢伙我想remane(添加_DONE它的名字)的文件重命名文件

我的研究表明,File.move(OLDNAME,NEWNAME)正是我需要的。 因此, 我做到了,

try 
{ 
    string oldname = name; 
    //XYZ_ZXX_ZZZ 
    string newName = ToBeTested + "_DONE.wav"; 
    //rename file 
    //NOTE : OldName is already in format XYZ_III_SSS.wav 
    File.Move(oldname, newName); 

} 
catch (Exception exRename) 
{ 
    string ex1 = exRename.ToString(); 
    //logging an error 
    string m = "File renaming process failed.[" + ex1 + "]"; 
    CreateLogFile(p, m); 
} 

,但它不帶有任何結果(文件不重命名),但記錄異常。

這樣

System.IO.FileNotFoundException: Could not find file 'C:\Users\Yachna\documents\visual studio 2010\Projects\FolderMonitoringService_RCCM\FolderMonitoringService_RCCM\bin\Debug\54447874_59862356_10292013_153921_555_877_400_101.wav'. 
File name: 'C:\Users\Yachna\documents\visual studio 2010\Projects\FolderMonitoringService_RCCM\FolderMonitoringService_RCCM\bin\Debug\54447874_59862356_10292013_153921_555_877_400_101.wav' 
    at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 
    at System.IO.File.Move(String sourceFileName, String destFileName) 
    at RCCMFolderMonitor.Monitor.OnChanged(Object source, FileSystemEventArgs e) in C:\Users\Yachna\documents\visual studio 2010\Projects\FolderMonitoringService_RCCM\RCCMFolderMonitor\Monitor.cs:line 209] 

我做了什麼錯?

+0

具有u檢查的路徑,舊的文件? –

+0

文件不存在於您的舊位置。 –

+0

是否必須將路徑作爲參數或文件的名稱唯一傳遞。我只傳遞了這樣的名稱(xyz_iii_oiu_ghfd.wav)。這是錯的嗎? –

回答

1

我猜這個文件與應用程序不在同一個文件夾中。

除了文件名之外,您還必須包含路徑。

File.Move(path + oldname, path + newName); 
1

從堆棧跟蹤,似乎您試圖移動/而你收到一個FileSystemWatcher組件的給onChanged事件重命名文件。如果這是真的,這意味着另一個應用程序正在寫入/更改您嘗試移動/重命名的文件。
這可能會導致上述錯誤消息。該文件存在,但在其他應用程序關閉它之前無法訪問它。

+1

錯誤是」未找到「。 –

1

如果不包含文件的路徑,Visual Studio將在Debug目錄中查找該文件。這是錯誤的原因。

你必須包括使用System.IO命名空間的方法Path.Combine文件的完整路徑:

string myDirectory = @"C:\Files"; 

string myFileName = "myFile.wav"; 
string myNewFileName = "myFileNew.wav"; 

string myFileFullPath = Path.Combine(myDirectory, myFileName); 
string myNewFileFullPath = Path.Combine(myDirectory, myNewFileName); 

Console.WriteLine(myFileFullPath); // it writes to Console: C:\Files\myFile.wav 

//Then you can rename the file 
File.Move(myFileFullPath, myNewFileFullPath);