为什么我不能重命名我的文件和文件夹?

Why I can't rename my files and folders?

所以我正在重新编写一个例程来重命名东西。我的文件夹树结构类似于:

Folder  ->  Folder(s)   -> Folder(s) + ImageFile(s)

Session ->  Location(s) -> Test(s)   + Images

所有位置都有相同的测试,重命名一个必须重命名所有位置。此外,每张图片都有一个与该图片同名的相关文件夹。因此图像 "one"、"two"、"three" 将在同一目录(位置)中包含文件夹 "one"、"two"、"three"。

我正在使用此代码重命名:

DirectoryInfo MainSessionFolder = new DirectoryInfo(FileStructure.CurrentSessionPath); // Main Session Folder
DirectoryInfo[] locations = MainSessionFolder.GetDirectories(); // Get all locations

foreach(var location in locations) // for every location
{
    DirectoryInfo[] TestFolders = location.GetDirectories(); // get test folders in that location
    foreach (var TestFolder in TestFolders) // for every test folder
    {
        if(SelectedTest.Name == TestFolder.Name) // check it it's what we want to rename
        Directory.Move(TestFolder.FullName, TestFolder.Name.Replace(SelectedTest.Name, NewName)); // rename it
    }

    FileInfo[] AllFiles = location.GetFiles(); // get all files in that location
    foreach (var ThisFile in AllFiles) // for every file in that location
    {
        if (SelectedTest.Name == ThisFile.Name) // check
            File.Move(SelectedTest.Name, NewName); // rename
    }
}

它在 DirectoryInfo.move 上弹出一个错误(不是 FileInfo.move,很奇怪,因为错误说文件)说:

An exception of type 'System.IO.IOException' ....
.. Cannot create a file when that file already exists ..

听起来你的移动和移动都指向同一个位置。

尝试暂时将您的 Directory.Move 语句分解为更小的部分,然后逐步检查所有值是否符合您的预期。

string target = TestFolder.Name.Replace(SelectedTest.Name, NewName);

然后检查TestFolder.FullName、TestFolder.Name、SelectedTest.Name、NewName、target

的值

检查它们是否符合您的预期,并在资源管理器中检查目标目录是否不存在。

应该能让您了解问题所在。