【发布时间】:2022-01-15 05:12:52
【问题描述】:
我正在尝试检查如何检查所有具有相同名称的文件名,并希望将这些相似的文件名与文件夹路径分组并将它们导出到文本文件。
到目前为止,我已经编写了以下代码,可以让我在每个 .png 文件名中找到 # 并成功在 # 后面添加数字。但我无法通过跳过 # 和之后的数字来检查重复名称。
我所有的文件名都是 .png 格式。
我有超过 100 个子文件夹,每个文件夹都有超过 2 个文件,最多 25 个 .png 文件。
文件命名风格:
非常感谢任何建议!
private void button1_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderDlg = new FolderBrowserDialog();
folderDlg.SelectedPath = "C:\\Users\\demo\\Documents\\process\\";
if (folderDlg.ShowDialog() != DialogResult.OK)
{
return;
}
// Has different framework dependend implementations
// in order to handle unauthorized access to subfolders
RenameAllPngFiles(folderDlg.SelectedPath);
}
private void RenameAllPngFiles(string directoryPath)
{
RenameCurrentPng(directoryPath);
foreach (var item in GetDirectoryInfos(directoryPath))
{
RenameCurrentPng(item.FullName);
}
}
private void RenameCurrentPng(string directoryPath)
{
int fileNameSuffixCounter = 1;
foreach (string originalFullFileName in Directory.EnumerateFiles(directoryPath, "*.png"))
{
string ShortFileName = System.IO.Path.GetFileNameWithoutExtension(originalFullFileName);
if (!ShortFileName.Contains("#"))
{
// The new file name without path
var newFileName = $"{ShortFileName}#{fileNameSuffixCounter++}{System.IO.Path.GetExtension(originalFullFileName)}";
FileSystem.RenameFile(originalFullFileName, newFileName);
}
}
}
private DirectoryInfo[] GetDirectoryInfos(string directoryPath)
{
DirectoryInfo di = new DirectoryInfo(directoryPath);
DirectoryInfo[] directories = di.GetDirectories("*", System.IO.SearchOption.AllDirectories);
return directories;
}
【问题讨论】:
-
真的很难说出你在问什么。听起来您有诸如
c:\img\monday\some#1.png c:\img\tuesday\some#1.png c:\img\wednesday\some#1.png之类的文件,并且您想让文件名在所有子文件夹中都是唯一的,例如c:\img\monday\some#1.png c:\img\tuesday\some#2.png c:\img\wednesday\some#3.png- 对吗?如果不正确,您可以编辑您的问题,以便类似地提出您的问题吗?说出你拥有什么/你在哪里,以及你在这个过程结束时要拥有什么/你想成为什么? -
@CaiusJard 嘿,谢谢您的回复。我想在所有文件夹中捕获重复的名称。但在我的文件名中,我得到了 xxx#1.png。我想在查找重复文件名时排除这个 # 和数字,然后将它们分组并列出/将名称列表处理为文本文件
标签: c# file-io duplicates filenames