Выполните итерацию файловой системы и запишите результаты в файл CSV - PullRequest
0 голосов
/ 30 января 2012

Я пишу программу, которая перебирает дерево файлов, и теперь мне нужно, чтобы она записала результаты в файл 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 также нужны заголовки, если вы тоже можете это сделать.

Ответы [ 2 ]

1 голос
/ 30 января 2012

Пока вы можете разместить все данные в памяти, лучше хранить их все и сортировать в памяти, а не записывать в файл.Концепция сортировки данных в файле, как правило, решается путем «чтения их в память, сортировки и повторной записи».

Что касается записи файла CSV, то на самом деле это не так сложно.Мне нравится использовать StringBuilder для добавления в каждое из полей каждой строки, а затем, когда у меня есть строка, я добавляю эту строку в файл.Для заголовков вы либо жестко их кодируете, если это уместно, либо получаете их из любого источника, который у вас есть, если он динамический.Разве вы не знаете, как записать в файл?Я думаю, что методы File.WriteAllText () и File.AppendText () - это все, что вам нужно для этого.

Просто общий совет, как вы и спросили, заключается в том, что вместо добавления элементов в список, поскольку вы в конечном итоге отсортируете их все, это добавьте их в SortedList, чтобы они сортировались по ходу работы.Затем, когда вы закончите, вы просто получите их по одному, и они уже в порядке.

0 голосов
/ 30 января 2012

Вы можете использовать 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, поэтому это не должно быть проблемой.

...