【轉】[C#] 重新命名資料夾

z5337發表於2024-07-05

轉自:https://jhrs.com/2022/45307.html

C#重新命名資料夾

透過C#程式碼對資料夾進行重新命名也是常見功能或需求,而在網上搜尋到的常見程式碼都是透過先建立新目錄,然後移動原來的檔案到新目錄的方式,大概所能見到的程式碼如下所示:

//步驟1,先建立新目錄,當前步驟非必須
Directory.CreateDirectory(destinationDir);

//步驟2,找到檔案,並移動
FileInfo file = new FileInfo(srcFileName);
file.MoveTo(destFileName);

以前只是常見的示例程式碼,事實上都是需要進行檔案移動操作,那麼有沒有像我們使用滑鼠右鍵,選中資料夾直接重新命名的方法呢?答案是有的,還是利用FileSystem類提供的方法,如下:

//這個就是重新命名目錄的方法,https://jhrs.com(江湖人士,國外網賺)讓你回答,是不是很簡單呢?
FileSystem.RenameDirectory(sourceDir, destDir);

C#重新命名檔案

重新命名檔案的需求經常出現在上傳功能時,使用者上傳的檔案伺服器端需要對它進行重新命名,通常會寫出網上常見的類似程式碼:

File.Move(),File.Copy() 版本的:

string src = @"原檔案路徑:C:\jhrs\com\old.file";
string dest = @"新檔案路徑:C:\jhrs\com\new.file";

try
{
    File.Move(src, dest);

    if (!File.Exists(src))
    {
        Console.WriteLine("jhrs.com提示:檔案重新命名成功.");
    }
}
catch (IOException e)
{
    Console.WriteLine("jhrs.com提示:{0}", e.ToString());
}

//或者透過複製檔案方式
File.Copy(src, dest, true);
File.Delete(src);

有了上面的知識,我們可以類推得出,同樣的我們可以使用FileSystem提供的方法對檔案進行重新命名了。

//這個就是重新命名檔案的方法,https://jhrs.com(江湖人士,國外網賺)讓你回答,是不是很簡單呢?
FileSystem.RenameFile(oldFile, newFile);

C#移動檔案

檔案操作常見功能就是移動檔案,微軟官網文件也給了示例文件,這是官網連結:

https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/file-system/how-to-copy-delete-and-move-files-and-folders

其它的程式碼這裡就暫不舉例了。直接上答案吧。

//這個就是移動檔案的方法,https://jhrs.com(江湖人士,國外網賺)讓你回答,是不是很簡單呢?
FileSystem.MoveFile(sourceFileName,destinationFileName)

C#移動目錄

當你透過程式碼移動目錄時,如果被移動的目錄檔案非常的大,再透過遞迴遍歷/迴圈遍歷目錄裡面的檔案進行移動是非常低效的做法。FileSystem提供了現成的方法,你可以呼叫它來移動目錄,經測試效率非常高。

//這個就是移動目錄的方法,https://jhrs.com(江湖人士,國外網賺)讓你回答,是不是很簡單呢? 
FileSystem.MoveDirectory(sourceDirectoryName, destinationDirectoryName)

最後說一下,你也可以呼叫 FileSystem.DeleteDirectory 方法刪除目錄,其它的方法,自己在VS裡面看一下提示吧,基本上從命名我們就知道它實現的是什麼功能。需要注意的是,被刪除的檔案或者目錄如果有隻讀屬性需要給它去掉。

/// <summary>
/// 遞迴去除檔案,jhrs.com 首發,目錄的只讀屬性
/// </summary>
/// <param name="dir"></param>
private void RemoveDirReadOnley(DirectoryInfo dir)
{
    dir.Attributes &= ~FileAttributes.ReadOnly;
    var files = dir.GetFiles();
    Parallel.ForEach(files, (f) =>
    {
        f.Attributes &= ~FileAttributes.ReadOnly;
    });

    var dires = dir.GetDirectories();
    Parallel.ForEach(dires, (f) =>
    {
        f.Attributes &= ~FileAttributes.ReadOnly;
        files = f.GetFiles();
        Parallel.ForEach(files, (m) =>
        {
            m.Attributes &= ~FileAttributes.ReadOnly;
        });
        RemoveDirReadOnley(f);
    });
}

結論

C# 中的細節還是有點多,使用C#進行檔案操作是很常見的功能,當有大量的檔案,目錄需要移動,重新命名,複製時,需要考慮一下效率的問題;FileSystem這個類提供的靜態方法基本上涵蓋了檔案的增、刪、改、移的操作,我們再也不需要去寫一些繁雜的程式碼來進行檔案操作了,直接用最簡單的方法吧。

相關文章