区分范围中的命名文件

本文关键字:文件 范围 | 更新日期: 2023-09-27 18:33:10

我正在循环浏览文件主扩展名为".123"的目录中的文件名。该文件被拆分为扩展名为".456"的跨度,其名称与主文件类似,但末尾的编号序列不同。

我被赋予了主文件名"CustomerName_123456_Name-of-File.123",并且还需要查找所有跨度文件。我面临的问题是,如果有两个文件的名称几乎相同,我最终会捕获所有文件。

文件CustomerName_123456_Name.123
文件CustomerName_123456_Name 001.456
文件CustomerName_123456_Name 002.456
文件CustomerName_123456_Name 002.456
CustomerName_123456_Name文件几乎相同.123
文件CustomerName_123456_Name几乎相同001.456
文件CustomerName_123456_Name几乎相同002.456
文件CustomerName_123456_Name几乎相同002.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();
    }
}

区分范围中的命名文件

您可以通过

Directory.GetFiles提供搜索模式来限制CustomerName_123456_Name-of-File???.456返回的内容。

resutls = Directory.GetFiles(
    Path, 
    Path.GetFileNameWithoutExtension(FileName) + "???.456").ToList();

您正在调用 Path.GetFileNameWithoutExtension((,它会忽略文件名的".xxx"部分,并且还将返回任何包含"CustomerName_123456_Name-of-File"的文件。

简单的解决方案是使用所需文件的全名调用 Path.GetFileName((,假设您正在寻找一个特定的文件,而不是尝试捕获多个文件。