Хорошо, позвольте мне дать вам подсказку, чтобы помочь вам с домашней работой.Загрузка полного файла в память будет, как вы знаете, не сработает, поскольку он предоставляется в качестве предварительного условия назначения.Вам нужно найти способ лениво загружать данные с диска по ходу и выбрасывать как можно больше данных как можно скорее.Поскольку отдельные строки могут быть слишком большими, вам придется делать это по одному символу за раз.
Попробуйте создать класс, представляющий абстракцию над строкой, например, обернув начальный индекс и конечный индекс этоголиния.Когда вы позволяете этому классу реализовать IComparable<T>
, он позволяет вам сортировать эту строку с другими строками.Опять же, хитрость заключается в том, чтобы иметь возможность читать символы из файла по одному.Вам нужно будет напрямую работать с Stream
s (File.Open
).
Когда вы сделаете это, вы сможете написать свой код приложения следующим образом:
List<FileLine> lines = GetLines("fileToSort.dat");
lines.Sort();
foreach (var line in lines)
{
line.AppendToFile("sortedFile.dat");
}
Вашзадача будет заключаться в реализации GetLines(string path)
и создании класса FileLine
.
Обратите внимание, что я предполагаю, что фактическое количество строк будет достаточно маленьким, чтобы List<FileLine>
поместился в памяти (что означает приблизительныймаксимум 40 000 000 строк).Если количество строк может быть выше, вам даже потребуется более гибкий подход, но поскольку речь идет о 20–30 строках, это не должно быть проблемой.