[英]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();
所以它的作用是將文件路徑傳遞給GetFileName
和GetFileNameWithoutExtension
,如果兩者都返回相同的字符串,則將結果包含在數組中。
作為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.