簡體   English   中英

C#獲取沒有擴展名的文件的文件路徑

[英]C# get file paths of just files with no extensions

我想獲得一個沒有擴展名的文件路徑的字符串數組。 如果有幫助,它們是沒有擴展名的二進制文件。

例如,我正在從文件夾/test/加載一組文件路徑

我只想要沒有擴展名的路徑和文件名(所以沒有.txt ,沒有.csv ,沒有.*

/test/dontWant.txt

/test/dontWant.csv

/test/doWant

如果我做:

String[] paths = Directory.GetFiles(fDir, "*.*", SearchOption.AllDirectories);

我當然得到那些目錄中的所有內容。

如果我然后嘗試:

String[] paths= Directory.GetFiles(fDir, "*", SearchOption.AllDirectories); 

我仍然會在該目錄中獲取所有內容。

有沒有辦法只獲取那些沒有擴展名的文件?


"*." 做了,我不知道為什么我沒有嘗試開始。

我應該一直使用EnumerateFiles開始。

您可以嘗試使用此通配符

String[] paths = Directory.GetFiles(fDir, "*.", SearchOption.AllDirectories);

您也可以將此通配符與Directory.EnumerateFiles

Directory.EnumerateFiles(fDir, "*.", SearchOption.AllDirectories);

這將有助於:

var filesWithoutExtension = System.IO.Directory.GetFiles(@"D:\temp\").Where(filPath => String.IsNullOrEmpty(System.IO.Path.GetExtension(filPath)));
foreach(string path in filesWithoutExtension)
{
    Console.WriteLine(path);
}

它將僅返回指定目錄中沒有擴展名的所有文件。 如果要包含所有必須使用的子目錄: System.IO.Directory.GetFiles(@"D:\\temp\\", "*", SearchOption.AllDirectories)

UPDATE
正如大家建議的那樣,最好使用Directory.EnumerateFiles因為它消耗的內存更少。

您需要對其進行第二遍過濾。

//If you are using .NET 3.5 you can still use GetFiles, EnumerateFiles will just use less ram.
String[] paths = Directory.EnumerateFiles(fDir, "*.*", SearchOption.AllDirectories)
                          .Where(file => Path.GetFileName(file) == Path.GetFileNameWithoutExtension(file))
                          .ToArray();

所以它的作用是將文件路徑傳遞給GetFileNameGetFileNameWithoutExtension ,如果兩者都返回相同的字符串,則將結果包含在數組中。

作為aleksey.berezan的答案的替代方案,您可以在.NET 4+中執行以下操作。 EnumerateFiles將在目錄樹中遍歷文件時返回文件。

foreach(var file in Directory.EnumerateFiles(fDir, "*.*", SearchOption.AllDirectories).Where(s => string.IsNullOrEmpty(Path.GetExtension(s))))
{

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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