2012-01-30 240 views
0

我正在編寫迭代文件樹的程序,現在我需要它將結果寫入csv文件。要求將內容在寫入csv文件之前按照字母數字順序排序。所以我一直在保存文件到列表。迭代文件系統並將結果寫入CSV文件

FileInfo fi = new FileInfo(file); 
fileList.Add(new Record { 
    fileName = fi.Name, 
    fileSize = fi.Length 
}); 

其中記錄是一個類:

public class Record 
{ 
    public long fileSize { get; set; } 
    public string fileName { get; set; } 

} 

然後我做一個普通的舊排序()。現在我該如何將這個列表寫入一個csv? 我歡迎任何更好的方法來完成整個過程。

有沒有一種方法可以將結果寫入csv,然後按照字母順序排序csv?基本上,該程序必須對其進行排序而不是用戶。

如果你能讓我繼續下去,csv也需要標題。

+0

'fileList.OrderByDescending(f => f.fileName);' – Dementic 2012-01-30 17:58:32

+0

你也可以'var csv = string.Join(「,」,fileList.OrderByDescending f => f.fileName));' – Dementic 2012-01-30 18:00:06

+0

你在編寫CSV文件時遇到了什麼問題?你有什麼試過的? – 2012-01-30 18:04:25

回答

0

您可以使用LINQ進行排序,使用StreamWriter進行文件創建。

using (var writer = new StreamWriter(@"C:\files.csv")) { 
    writer.WriteLine("Name,Size"); // Header 
    var query = fileList.OrderBy(r => r.fileName); 
    foreach (Record record in query) { 
     writer.WriteLine("\"{0}\",{1}", record.fileName, record.fileSize); 
    } 
} 

請注意,我用雙引號(「)包圍的文件名,在一個逗號(,)是文件名稱的一部分的情況下,雙引號本身是不適合的文件名的有效字符Windows,所以它不應該是一個問題。

1

只要你能適應內存中的所有數據,你最好不要把它寫在內存中而是把它存儲在內存中,而不是寫入文件。在文件中對數據進行排序的概念通常通過「將其讀入內存,對其進行分類並將其重新寫回」來解決。

至於編寫一個CSV文件,這並不是很難。我喜歡使用StringBuilder爲每行添加每個字段,然後一旦我有一行,我將該行添加到文件中。對於標題,您可以在適當的情況下對它們進行硬編碼,或者如果它是動態的,則可以從任何來源獲取它們。你不知道如何寫入文件?我的猜測是File.WriteAllText()和File.AppendText()方法將是你所需要的。

自從你問了一個簡單的提示,就是將它們添加到列表中,而不是將它們添加到列表中,因爲你最終將它們全部排序,就是將它們添加到SortedList中,以便它們按順序排序。然後,當你完成時,你只需要一次一個地獲得它們,而且它們已經處於有序狀態。

+0

+1只是提示。 – Dementic 2012-01-30 18:04:49