我的应用程序在以下目录结构中生成文件
FolderMatchALeve1
-FileMatchALevel2_A.cs
-FileMatchALevel2_B.cs
-FolderMatchALevel2
--FileMatchALevel3_A.txt
--FileMatchALevel3_B.txt
我要寻找一种方式来命名的目录结构,具有以下变迁- “抹茶”到“AMatch”。
所以执行程序后的结果应该是这样的:
FolderAMatchLeve1
-FileAMatchLevel2_A.cs
-FileAMatchLevel2_B.cs
-FolderAMatchLevel2
--FileAMatchLevel3_A.txt
--FileAMatchLevel3_B.txt
到目前为止,在我寻求解决方案的过程中,我一直没有成功。请帮我找到解决方案。
由于在我们公司维护遗留产品,我需要在 C# Winforms 中使用此解决方案。
编辑:
附加信息
每次有人运行我们的程序时,我都需要进行此更改。
我需要对 3350 个文件执行此操作
问题总结:
简而言之,在递归(或迭代)遍历每个目录时,我希望它重命名名称与匹配字符串匹配的文件,然后在出来后重命名目录,如果它的名称也与字符串匹配(对于所有部分或完全匹配)。
快速和肮脏(但有效)
public static class DirectoryRenamer
{
public static void RenameDirectoryTree( string path, Func<string, string> renamingRule )
{
var di = new DirectoryInfo( path );
RenameDirectoryTree( di, renamingRule );
}
public static void RenameDirectoryTree( DirectoryInfo directory, Func<string, string> renamingRule )
{
InternalRenameDirectoryTree( directory, renamingRule );
var currentName = directory.Name;
var newName = renamingRule( currentName );
if ( currentName != newName )
{
var newDirname = Path.Combine( directory.Parent.FullName, newName );
directory.MoveTo( newDirname );
}
}
static void InternalRenameDirectoryTree( DirectoryInfo di, Func<string, string> renamingRule )
{
foreach ( var item in di.GetFileSystemInfos() )
{
var subdir = item as DirectoryInfo;
if ( subdir != null )
{
InternalRenameDirectoryTree( subdir, renamingRule );
var currentName = subdir.Name;
var newName = renamingRule( currentName );
if ( currentName != newName )
{
var newDirname = Path.Combine( subdir.Parent.FullName, newName );
subdir.MoveTo( newDirname );
}
}
var file = item as FileInfo;
if ( file != null )
{
var currentName = Path.GetFileNameWithoutExtension( file.Name );
var newName = renamingRule( currentName );
if ( currentName != newName )
{
var newFilename = Path.Combine( file.DirectoryName, newName + file.Extension );
file.MoveTo( newFilename );
}
}
}
}
}
示例用法
class Program
{
static void Main( string[] args )
{
DirectoryRenamer.RenameDirectoryTree(
@"C:\Test\FolderMatchALevel",
name => name.Replace( "MatchA", "AMatch" ) );
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句