[英]How to Remove Directories From EnumerateFiles?
因此,我正在開發一個程序,該程序將列出目錄中的所有文件。 很簡單 基本上,當我這樣做時: List<string> dirs = new List<string>(Directory.EnumerateFiles(target));
,我不希望它包含目錄和所有內容。 只是文件名。 當我運行我的代碼時;
List<string> dirs = new List<string>(Directory.EnumerateFiles(target));
Console.WriteLine($"Folders and files in this directory:\n");
foreach (string i in dirs) {
Console.WriteLine($"> {i}");
}
它給了我以下內容:
C:\\ Users \\ Camden \\ Desktop \\ Programming \\ Visual Studio \\ C#\\ DirectoryManager \\ DirectoryManager \\ bin \\ Debug \\ DirectoryManager.exe
我只需要DirectoryManager.exe部分,因此我進行了查找,發現可以替換字符串中的字符串。 像這樣: i.Replace(target, "");
。 但是,這沒有做任何事情,只是正常運行。 為什么不替換呢?我應該怎么做呢?
使用System.IO.Path類中的方法。
var fullfile = @"C:\Users\Camden\Desktop\Programming\Visual Studio\C#\DirectoryManager\DirectoryManager\bin\Debug\DirectoryManager.exe";
var fileName = Path.GetFileName(fullfile); // DirectoryManager.exe
var name = Path.GetFileNameWithoutExtension(fullfile); // DirectoryManager
最簡單的方法是使用Select IEnumerable擴展名
(您需要using Linq;
在源代碼文件的頂部)
List<string> files = new List<string>(Directory.EnumerateFiles(target)
.Select(x => Path.GetFileName(x)));
通過這種方式,將Directory.EnumerateFiles
檢索的文件序列一個接一個地傳遞到Select
方法,在該方法中,每個完整文件名(x)都傳遞給Path.GetFileName
以產生僅文件名的新序列。
然后,此序列作為參數返回給List構造函數。
關於您對Replace方法的問題。 請記住,Replace方法不會更改用於調用該方法的字符串,而是返回執行了替換操作的新字符串。 在NET中,字符串是不可變的。
因此,如果您要查看替換產品,則需要
string justFileName = i.Replace(target, "");
使用Directory.EnumerateFiles
的替代方法是DirectoryInfo.EnumerateFiles
。 此方法返回IEnumerable<FileInfo>
。 然后,您可以使用每個返回對象的FileInfo.Name
屬性。 您的代碼將變為:
var files = new DirectoryInfo(target).EnumerateFiles();
Console.WriteLine("Files in this directory:\n");
foreach (FileInfo i in files) {
Console.WriteLine($"> {i.Name}");
}
僅列出文件名:
List<string> fileNames = new DirectoryInfo(target).EnumerateFiles().Select(f => f.Name).ToList();
另外,如果您同時需要文件和目錄,則可以使用EnumerateFileSystemInfos
。 如果您需要知道是否有文件還是目錄,可以查詢Attributes
屬性並將其與FileAttributes
標志枚舉進行比較。
var dirsAndFiles = new DirectoryInfo(target).EnumerateFileSystemInfos();
Console.WriteLine("Folders and files in this directory:\n");
foreach (var i in dirsAndFiles) {
var type = (i.Attributes & FileAttributes.Directory) == FileAttributes.Directory ? "Directory" : "File";
Console.WriteLine($"{type} > {i.Name}");
}
FileSystemInfo.Name
屬性將返回文件名(如果是文件)或層次結構中的最后一個目錄(對於目錄),因此僅返回子目錄名而不是完整路徑(“ sub”而不是“ c” :\\ sub“)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.