簡體   English   中英

包含功能在子目錄中找不到特定文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM