C# 在列表中的某个位置搜索特定字符

C# 在列表中的某个位置搜索特定字符,c#,C#,我对c#非常陌生,正在从事一个项目,需要在目录中搜索特定的文档类型,并记录所有文档类型的名称。对于这些文档名,我需要检查它们是否都以xxxx-xxxx-xxxxxx-xxx-xxx-xxx格式的ID开头,并且只保存这两个语句都为真的文档名 我使用: var filesToBeRead = Directory.GetFiles(FBD.SelectedPath, "*.*", SearchOption.AllDirectories)

我对c#非常陌生,正在从事一个项目,需要在目录中搜索特定的文档类型,并记录所有文档类型的名称。对于这些文档名,我需要检查它们是否都以xxxx-xxxx-xxxxxx-xxx-xxx-xxx格式的ID开头,并且只保存这两个语句都为真的文档名

我使用:

            var filesToBeRead = Directory.GetFiles(FBD.SelectedPath, "*.*", SearchOption.AllDirectories)  
            .Where(s => s.EndsWith(".txt") || s.EndsWith(".docx") || s.EndsWith(".doc")|| s.EndsWith(".xls") || s.EndsWith(".docm") || s.EndsWith(".xlsm") || s.EndsWith(".xlsx")); 
获取指定目录中的所有文件并将其保存为IEnumerable字符串。 然后我将其复制到一个列表中,因为我认为列表更容易操作。(我不确定他们是否真的是同一件事,我正在为自己做额外的工作)

var allFiles=new List();
allFiles=filesToBeRead.ToList();
从这里开始,我真的不知道该怎么办。我的想法是:因为xxxx-xxxx-xxxxxx-xxx-xxx是我在每个文档名的开头寻找的格式,它有24个字符长,所以我会搜索第25个字符,并复制之前字符串中的所有内容。我不完全确定如何做到这一点,更具体地说,我不确定如何循环浏览列表并每次复制它

我的想法是使用foreach,但我不确定如何指定我正在寻找第25个字符并复制之前的所有内容


非常感谢您对网页的任何帮助或指导,以了解如何执行此操作。

此linq查询将检索以这些扩展名结尾的所有文件的
列表,并且第25个
字符等于
x
。您可以更改
charToSearch
,以便仅查找所需的文件

var charToSearch = 'x';
var filesToBeRead = Directory.GetFiles(FBD.SelectedPath, "*.*", SearchOption.AllDirectories)
                                 .Where(s => (s.EndsWith(".txt") || s.EndsWith(".docx") || s.EndsWith(".doc") || s.EndsWith(".xls") ||
                                 s.EndsWith(".docm") || s.EndsWith(".xlsm") || s.EndsWith(".xlsx"))
                                 && s[25] == charToSearch) .ToList();
我不确定它们是否真的是一样的,我正在为自己做额外的工作

它们可能是,但不需要太详细,您不必担心,因为它们实现了
IEnumerable
,所以它们的行为是相同的

var allFiles = new List<string>();
allFiles = filesToBeRead.ToList();

至于如何查看文件名是否与您的模式匹配,则以“匹配您的模式”为线索。我认为所需的模式类似于Guid,因此如果您使用
Path.getFileName WithOutExtension()
获取文件名,然后使用
Regex
查看它是否与Guid模式匹配,您可能会被排序。

您是否在询问如何获取没有扩展名的文件名?如果你是,那么看看。
var allFiles = new List<string>();
allFiles = filesToBeRead.ToList();
var filesToBeRead = 
   Directory.GetFiles(FBD.SelectedPath, "*.*", SearchOption.AllDirectories)  
            .Where(s => s.EndsWith(".txt") 
                        || s.EndsWith(".docx")
                        || s.EndsWith(".doc")
                        || s.EndsWith(".xls")
                        || s.EndsWith(".docm")
                        || s.EndsWith(".xlsm")
                        || s.EndsWith(".xlsx"))
            .ToList();