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