区分像跨度中的命名文件

时间:2014-12-03 18:03:05

标签: c#

我在文件具有主扩展名" .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();
    }
}

2 个答案:

答案 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(),假设您正在查找特定文件,而不是尝试捕获多个文件。