C# 使用正则表达式重命名文件夹
请注意:这是一个代码问题,不是系统操作问题 我有几个文件夹,基本上是一个文件夹里面一个文件夹里面一个文件夹里面一个文件夹。。。。我想知道如果有人知道如何使用RegEx重命名文件夹名称?基本上我需要摆脱~“%&*:<>?/\{|}在任何文件夹名称中。我想知道如何做到这一点,因为我认为我需要从下至上开始,这意味着最后一个可能的深入文件夹,并开始重命名文件夹,从最低级别一直到最高级别 有人有什么想法吗 因此,我有以下代码:C# 使用正则表达式重命名文件夹,c#,regex,C#,Regex,请注意:这是一个代码问题,不是系统操作问题 我有几个文件夹,基本上是一个文件夹里面一个文件夹里面一个文件夹里面一个文件夹。。。。我想知道如果有人知道如何使用RegEx重命名文件夹名称?基本上我需要摆脱~“%&*:?/\{|}在任何文件夹名称中。我想知道如何做到这一点,因为我认为我需要从下至上开始,这意味着最后一个可能的深入文件夹,并开始重命名文件夹,从最低级别一直到最高级别 有人有什么想法吗 因此,我有以下代码: public partial class CleanPathResults :
public partial class CleanPathResults : Form
{
public CleanPathResults()
{
InitializeComponent();
}
public void Sanitizer(List<string> dirtyPaths)
{
string regPattern = (@"[~#&!%+{}]+");
string replacement = " ";
Regex regExPattern = new Regex(regPattern);
Regex regExPattern2 = new Regex(@"\s{2,}");
StreamWriter errors = new StreamWriter(@"S:\test\Errors.txt", true);
var dirCount = new Dictionary<string, int>();
dataGridView1.Rows.Clear();
try
{
foreach (string invalidPaths in dirtyPaths)
{
string sanitizedPath = regExPattern.Replace(invalidPaths, replacement);
sanitizedPath = regExPattern2.Replace(sanitizedPath, replacement);
DataGridViewRow clean = new DataGridViewRow();
clean.CreateCells(dataGridView1);
clean.Cells[0].Value = invalidPaths;
clean.Cells[1].Value = sanitizedPath;
dataGridView1.Rows.Add(clean);
System.IO.Directory.Move(invalidPaths, sanitizedPath);
}
}
catch (Exception e)
{
throw;
//errors.Write(e);
}
}
我在这里面临的最大问题是,这些路径需要从最低级别的文件夹重命名为最高级别的文件夹,否则我将在调试过程中不断抛出错误
我的问题是如何钻入驱动器,转到树视图中最低的文件夹,向上重命名文件夹?
以路径为例:G:\Test~\这只是%a Test\Test&Test\testing\test.txt
我怎么可能能够重命名它并从测试开始!!文件夹,然后按我的方式向上移动,这样我就不会收到任何错误?您想要的是的属性。拥有目录和新名称后,可以使用函数重命名它
如果要深入到目录的子目录,可以在父目录上使用方法,直到返回空数组或空数组为止。最简单的方法是通过递归
此函数将允许您向下搜索,您可以从父目录开始:
private void DrillDown(string folderPath) {
DirectoryInfo info = new DirectoryInfo(folderPath);
DirectoryInfo[] directories = info.GetDirectories();
foreach(DirectoryInfo directory in directories) {
fixFolder(directory.FullName);
}
renameFolder(folderPath);
}
renameFolder是重命名文件夹的地方。您需要一个文件夹来遍历目录。您的代码似乎做得太多了。这里有一个片段,它只是清理了目录名
static void SanitizeFolders(DirectoryInfo root)
{
string regPattern = (@"[~#&!%+{}]+");
string cleanName = "";
Regex regExPattern = new Regex(regPattern);
foreach (DirectoryInfo sub in root.GetDirectories())
{
if (regExPattern.IsMatch(sub.Name))
{
/* set cleanName appropriately... */
sub.MoveTo(cleanName);
}
}
//recurse into subdirectories
foreach (DirectoryInfo sub in root.GetDirectories())
{
SanitizeFolders(sub);
}
}
他想要深度优先,因为他要先更改最低的子目录。很抱歉,b/c我是c新手,我该如何实现它?我在第一个foreach循环中尝试了这个方法,但是我的foldername没有GetDirectories方法。这不只是文件吗?@yeahumok:你是说这没有编译,还是说你发送的DirectoryInfo对象没有子文件夹?