#c# #string #filestream
Вопрос:
Поэтому я создал программу для решения математических задач, которая в основном считывает одно число из текстового файла (единственное число в этом текстовом файле) и заменяет его числом 1, если число не является решением. Теперь проблема в том, что если я добавлю текст только в следующую строку, используя
sw.WriteLine(text);
это делает вычисления действительно быстрыми, делая более 100 тысяч чисел за несколько секунд, но это просто добавление числа в текстовый файл без удаления предыдущего.
В качестве альтернативы я использовал
string[] lines = File.ReadAllLines("numbers.txt");
foreach (string line in lines)
{
lines[0] = Convert.ToString(biginta);
}
File.WriteAllLines("numbers.txt", lines);
но из-за этого моя программа работала значительно медленнее.
Есть ли способ заменить текст в файле .txt с помощью уже открытого потока файлов?
Я новичок в c#, поэтому вся моя программа по сути является Франкенштейном кода.
Комментарии:
1. проблема в том, что при хранении чисел в виде текста они занимают разное количество байтов. Если вы замените «9» на «10», вам нужно переписать остальную часть файла, чтобы освободить место для 1 символа.
2. Возможно, вопрос в следующем: почему вы храните его в файле? Если вы хотите часто обновлять такое значение, то файл, вероятно, не тот вариант хранения, который вы ищете.
3. Это большой математический расчет, который должен найти правильное число, и я использую файл для хранения следующего числа, необходимого для запуска, потому что я выключаю свой компьютер на ночь. В настоящее время их число составляет около 200 триллионов
4. @ChuftiMeatball Простой плоский текстовый файл-не единственный формат, который может пережить перезагрузку компьютера. Примеры поиска, такие как база данных или постоянный кэш. Или, возможно, реструктурируйте свои файлы, чтобы избежать необходимости вносить небольшие изменения в большой файл.
5. Просто
[BinaryWriter].Write([some string]); [BinaryWriter].BaseStream.Position = 0;
? Или что-то в этом роде. Если вам действительно нужно писать этот BigInteger каждый раз, когда вы его создаете (вероятно, лучше написать буфер вместо строки).
Ответ №1:
Я использую файл для хранения следующего номера, необходимого для запуска, потому что я выключаю компьютер на ночь.
Честно говоря, самое быстрое решение для этого заключается в следующем: прочитайте файл один раз, выполните несколько (например, 100) вычислений без сохранения, а затем сохраните текущее число обратно в файл. Настройте интервал так, чтобы текущее состояние сохранялось примерно каждые 5 секунд.
Это дает вам все еще хорошую отправную точку (не более 5 секунд потерянной работы), но также уменьшает ввод-вывод диска до такой степени, что это больше не замедлит вычисления.