0

ファイル ツリーを反復処理するプログラムを作成していますが、結果を csv ファイルに書き込む必要があります。csv ファイルに書き込む前に、コンテンツを英数字順に並べ替える必要があります。だから私はファイルをリストに保存しています。

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

Record はクラスです。

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

}

次に、昔ながらの Sort() を実行しています。このリストをcsvに書き込むにはどうすればよいですか?プロセス全体を行うためのより良い方法を歓迎します。

結果を csv に書き込んでから、csv を英数字順に並べ替える方法はありますか? 基本的に、ユーザーではなく、プログラムがそれをソートする必要があります。

csv にもヘッダーが必要です。

4

2 に答える 2

1

すべてのデータをメモリに収めることができる限り、ファイルに書き込むよりも、すべてを保持してメモリ内でソートする方がよいでしょう。ファイル内のデータを並べ替えるという概念は、通常、「メモリに読み込んで並べ替え、再度書き出す」ことで解決されます。

CSV ファイルの作成に関しては、それほど難しいことではありません。StringBuilder を使用して各行の各フィールドに追加し、行ができたらその行をファイルに追加します。ヘッダーについては、必要に応じてハード コードするか、動的な場合は任意のソースから取得します。ファイルへの書き込み方法がわかりませんか?私の推測では、 File.WriteAllText() および File.AppendText() メソッドだけで十分です。

あなたが尋ねたように、一般的なヒントは、アイテムをリストに追加するのではなく、最終的にすべてをソートするので、それらをSortedListに追加することです。それが終わったら、一度に 1 つずつ取得するだけで、すでに順番に並んでいます。

于 2012-01-30T18:02:44.587 に答える
0

並べ替えには LINQ を使用StreamWriterし、ファイルの作成には a を使用できます。

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 のファイル名として有効な文字ではないため、使用しないでください。問題になる。

于 2012-01-30T18:23:00.010 に答える