我无法在其末尾移动/重命名带有空格的目录

时间:2016-01-22 00:43:15

标签: c# directory

我有一个包含名称末尾空格的文件夹和文件的大目录,我试图将具有该空间的目录重命名为没有的目录,以便其他应用程序能够访问它

我正在使用C#(但是如果有更好的选择可以解决这个问题,请提出建议)并且这是我的整个代码:

using System;
using System.IO;
using System.Text.RegularExpressions;

namespace removing_spaces_in_directories_names
{
    class Program
    {
        public static string path = "../../../old_directory";
        static void Main(string[] args)
        {
            DirectoryInfo di = new DirectoryInfo(path);
            WalkDirectoryTree(di);
            Console.ReadLine();
        }

        static void WalkDirectoryTree(System.IO.DirectoryInfo root)
        {
            if (root.Name != "old_directory")
            { renameDirectory(root); }
            DirectoryInfo[] diArr = root.GetDirectories();
            foreach(DirectoryInfo di in diArr)
            {
                WalkDirectoryTree(di);
            }
        }

        static void renameDirectory(System.IO.DirectoryInfo dir)
        {
            Console.WriteLine("renaming: " + dir.FullName);
            string newName = ReplaceLastOccurrence(dir.FullName, " ", "");
            if (Directory.Exists(dir.FullName) == false)
            {
                //dir.MoveTo(newName);
                String oldName = @"\\?\"+dir.FullName;
                Directory.Move(oldName,newName);
            }
        }

        public static string ReplaceLastOccurrence(string Source, string Find, string Replace)
        {
            int place = Source.LastIndexOf(Find);

            if (place == -1)
                return Source;

            string result = Source.Remove(place, Find.Length).Insert(place, Replace);
            return result;
        }
    }
}

我尝试添加&#34; \?\&#34;在建议here的文件夹名称的开头,但这不起作用,我添加的错误是:路径中的非法字符。< / p>

另一方面,如果我使用dir.MoveTo(newName);而不使用&#34; \?\&#34;字符我发现错误:无法找到路径的一部分&#39;志愿者信息&#39>

如果有的话,我该怎么办呢?也许在Linux上运行这个应用程序而不是Windows帮助?

2 个答案:

答案 0 :(得分:0)

对于要重命名的每个目录(在这种情况下删除末尾的尾随空格),假设您的DirectoryInfo变量名为di

你想这样做:

string oldName = di.FullName;
string newName = oldName.TrimEnd();
Directory.Move(oldName, newName);

答案 1 :(得分:0)

我在一个PHP应用程序中重写了这个,该应用程序位于Linux上并且有效。