Как записать данные xml в несколько файлов, проверив размер файла

Я создаю карту сайта xml! Существует ограничение в 50 тыс. URL-адресов или ограничение размера 10 МБ. Есть ли способ проверить размер файла и записать в новый файл xml, когда будет достигнут предел размера 10 МБ? Я использую XmlTextWriter (C#) для создания файлов xml.


person chuckyCheese    schedule 11.11.2010    source источник


Ответы (1)


Если вы используете XmlTextWriter, вы можете передать пользовательский «System.IO.Stream» для обработки ограничения размера 10 МБ. Ваш пользовательский поток будет контролировать размер файла и создавать новый файл с определенным интервалом.

Таким образом, вы можете ориентироваться на что-то вроде:

var folder = @"C:\temp";
var maxSizeInBytes = 10240;
var stream = new SegmentedStream(folder, maxSizeInBytes);

var xmlWriter = new XmlTextWriter(stream, Encoding.UTF8);

int maxRecords = 50000;
int i = 0;
foreach (var url in UrlList){
    i++;

    if (i == maxRecords){
        stream.StartNewFile(); // custom method on your SegmentedStream class
        i == 0;
    }

    // TODO: write URL using xmlWriter
    // explicitly calling Flush on the xmlWriter, may be appropriate
}

Я не очень хорошо знаком с реализацией XmlTextWriter, но вам, возможно, придется проявить смекалку, чтобы не получить один XML-узел, охватывающий два файла.

Обновление: лучшим подходом может быть просто запись всего XML-файла. А затем в качестве постобработки их разделили.

person Larsenal    schedule 11.11.2010