重命名文件

时间:2013-10-28 11:57:34

标签: c# file-rename

伙计我正在尝试重新保存文件(将_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]

我做错了什么?

3 个答案:

答案 0 :(得分:1)

我猜该文件与应用程序不在同一文件夹中。

除文件名外,您还必须包含路径。

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

答案 1 :(得分:1)

在收到FileSystemWatcher组件的OnChanged事件时,似乎您正在尝试移动/重命名该文件。如果这是真的,这意味着另一个应用程序正在编写/更改您尝试移动/重命名的文件 这可能会导致上述错误消息。该文件存在,但在其他应用程序关闭之前,您无法访问该文件。

答案 2 :(得分: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);