重命名文件

本文关键字:文件 重命名 | 更新日期: 2023-09-27 18:37:18

伙计们,我正在尝试重新识别一个文件(在其名称中添加_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]

我做错了什么?

重命名文件

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

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

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

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

如果不包含文件的路径,Visual Studio 会在 Debug 目录中查找该文件。这是错误的原因。

您必须使用方法 Path.Combined of System.IO 命名空间包含文件的完整路径:

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);