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

StackOverflow https://stackoverflow.com/questions/4160086

  •  08-10-2019
  •  | 
  •  

Вопрос

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

Это было полезно?

Решение

Если вы используете 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. И тогда как пост-процесс разделил их.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top