我在文件具有主扩展名" .123"的目录中循环浏览文件名。该文件被拆分为扩展名为" .456"并且被命名为主文件,但最后有不同的数字序列。
我获得了主文件名" CustomerName_123456_Name-of-File.123"并且还需要查找所有span文件。我面临的问题是,如果有两个命名几乎相同的文件,我最终会捕获所有文件。
CustomerName_123456_Name-的-File.123
CustomerName_123456_Name-的-File001.456
CustomerName_123456_Name-的-File002.456
CustomerName_123456_Name-的-File002.456
CustomerName_123456_Name-的 - 文件 - 那 - 几乎Identical.123
CustomerName_123456_Name-的 - 文件 - 那 - 几乎Identical001.456
CustomerName_123456_Name-的 - 文件 - 那 - 几乎Identical002.456
CustomerName_123456_Name-的-文件的那-几乎-Identical002.456
我使用一些非常基本且有限的代码来完成我目前的结果。
public static string[] GetFilesInDirectory(string FileName, string Path)
{
string[] FilesInPath = { "" };
List<string> results = new List<string>();
try
{
FilesInPath = Directory.GetFiles(Path);
foreach (string FileInPath in FilesInPath)
{
if (FileInPath.IndexOf(Path.GetFileNameWithoutExtension(FileName)) > -1)
{
results.Add(Path.GetFileName(FileInPath));
}
}
FilesInPath = null;
return results.ToArray();
}
catch (Exception ex)
{
return results.ToArray();
}
}
如果我调用函数GetFilesInDirectory('CustomerName_123456_Name-of-File.123', 'C:\')
,它将返回所有文件。
有更好更准确的方法来实现这一目标吗?
更新:
我使用答案中的一些建议写了一些逻辑:
public static string[] GetImageFilesInDirectory(string FileName, string Path)
{
string[] FilesInPath = { "" };
List<string> results = new List<string>();
try
{
FilesInPath = Directory.GetFiles(Path, Path.GetFileNameWithoutExtension(FileName) + "???.???", SearchOption.TopDirectoryOnly);
foreach (string FileInPath in FilesInPath)
{
if (Path.GetExtension(FileInPath).ToLower() == Path.GetExtension(FileName).ToLower())
{
if (Path.GetFileNameWithoutExtension(FileInPath) == Path.GetFileNameWithoutExtension(FileName))
{
results.Add(Path.GetFileName(FileInPath));
}
}
else
{
if (FileInPath.IndexOf(Path.GetFileNameWithoutExtension(FileName)) > -1)
{
results.Add(Path.GetFileName(FileInPath));
}
}
}
FilesInPath = null;
return results.ToArray();
}
catch (Exception ex)
{
return results.ToArray();
}
}
答案 0 :(得分:2)
您可以通过为Directory.GetFiles
提供搜索模式来限制CustomerName_123456_Name-of-File???.456
返回的内容。
resutls = Directory.GetFiles(
Path,
Path.GetFileNameWithoutExtension(FileName) + "???.456").ToList();
答案 1 :(得分:0)
您正在调用Path.GetFileNameWithoutExtension(),它忽略文件名的“.xxx”部分,并且还将返回其中包含“CustomerName_123456_Name-of-File”的任何文件。
简单的解决方案是使用所需文件的全名调用Path.GetFileName(),假设您正在查找特定文件,而不是尝试捕获多个文件。