Пользователь создаёт запись в файле. Далее, если нужно, он может переписать нужную запись. Как сделать грамотно перезапись строки, чтобы не нужно было переписывать целый файл, в котором может быть тысячи строк?
При условии, что строки произволной длины. Мне кажется, можно и перезаписывать, если файл не огромный. "Тысячи строк" не выглядит страшно.
Главное - стараться не читать весь файл в память для этого.
Этот метод перезапишет одну строку в файле по ее индексу.
private static void RewriteLine(string path, int lineIndex, string newValue)
{
int i = 0;
string tempPath = path + ".tmp";
using (StreamReader sr = new StreamReader(path)) // читаем
using (StreamWriter sw = new StreamWriter(tempPath)) // и сразу же пишем во временный файл
{
while (!sr.EndOfStream)
{
string line = sr.ReadLine();
if (lineIndex == i)
sw.WriteLine(newValue);
else
sw.WriteLine(line);
i++;
}
}
File.Delete(path); // удаляем старый файл
File.Move(tempPath, path); // переименовываем временный файл
}
Должно работать очень быстро, настолько, насколько диск позволяет. Если файл нормально разбит на строки, то и памяти съест немного.
Можно еще доработать, чтобы строка дописывалась в конец, если индекс строки больше, чем строк в исходном файле.
RewriteLine("file.txt", 1, "New string");
Для того, чтобы менять данные в файле не перезаписывая файл целиком, надо либо иметь строки фиксированной длины, тогда можно будет просто по нужному смещению записать нужный текст, либо реализовывать таблицу размещения данных с поддержкой фрагментации, по подобию (любой) файловой системы.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
В общем, имеются в программе события, одно из них-CollectionCountChanged, которое генерируется функцией OnCollectionCountChanged:
Формат содержимого файла: дата,фамилия сотрудника,кол-во часов роботы,проделанная работа
подскажите, может кто знает, почему когда запускаешь Game в Unity вся механика игры работает, а когда пытаешься реализовать механику в окне Scene ничего...