[英]Contains function doesn't find specific files in sub directories
我創建了一個利用Directory.GetFiles函數的字符串數組,該函數使用來自項目中所有子目錄的.cs文件擴展名填充該數組。 很好,但是,我嘗試使用包含方法過濾包含這些名稱的文件,同時將這些文件寫入文本文檔,同時從數組中排除諸如“ AssemblyInfo.cs”和“ TemporaryGeneratedFiles_xxx.cs”之類的特定文件。 在大多數情況下,這些文件中的大多數都沒有寫入文本文檔,但是,在某些情況下,這些文件設法顯示在文本文檔中。
我試過使用foreach語句而不是for循環。 我試着通過將它們放在for循環的不同位置來嘗試使用str.flush()
, str.close()
, directoryNames.Dispose()
和directoryNames.Close()
。 我嘗試嵌套if
語句,而不是使用&&
運算符。 ||
操作員在這種情況下不起作用。 我嘗試使用整個文件名,並且只使用文件名的一點點,但這似乎都不起作用。 有一次我確實設法刪除了所有帶有“ Temporary”的文件,但“ AssemblyInfo.cs”文件仍然保留。 我什至提出了一種方法來完全刪除文件名中帶有“臨時”或“匯編”一詞的所有內容,但這也失敗了。
FileStream directoryNames = new FileStream(dirListPath, FileMode.OpenOrCreate);
StreamWriter str = new StreamWriter(directoryNames);
string[] allFiles = Directory.GetFiles(dirPath, "*.cs", SearchOption.AllDirectories);
for (int i = 0; i < allFiles.Length; i++)
{
if ((!allFiles[i].Contains("Temporary")) && (!allFiles[i].Contains("Assembly")))
{
str.Write(allFiles[i] + Environment.NewLine);
}
}
str.Flush();
str.Close();
directoryNames.Dispose();
directoryNames.Close();
沒有錯誤消息發生,但是如上所述,意外的文件彈出了不應該出現的位置。 任何幫助將不勝感激。
感謝所有張貼的人。 經過一些測試,mjwillis是正確的。 它沒有覆蓋文本文件中的內容,而是繼續寫入文件的頂部並添加到先前寫入的內容中。 通過添加進行修復
using (FileStream clearTextDocument = File.Create(dirListPath)) { }
在FileStream DirectoryNames行之前。 如果此文檔更具吸引力,請隨意發布另一種清除文本文檔的方法。
如@steve所建議,您的代碼將忽略大小寫。 試試這個。
var allFiles = Directory.EnumerateFiles(dirPath, "*.cs", SearchOption.AllDirectories)
.Where(file => file.IndexOf("Temporary", StringComparison.InvariantCultureIgnoreCase) < 0
&& file.IndexOf("Assembly", StringComparison.InvariantCultureIgnoreCase) < 0);
File.WriteAllLines(dirListPath, allFiles);
PS:此代碼對您的代碼進行了許多更改,但從本質上講,它們是相同的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.