Рейтинг:
13
OriginalGriff
В текстовых файлах нет "строк" - в них есть" символы Терминатора строк", которые при некоторых обстоятельствах позволяют рассматривать их как отдельные строки. Но это не значит, что" строки есть строки "- Если ваши новые данные на один символ больше или меньше старых данных (а так оно и будет), то вы не можете просто" переписать строку", так как для этого вам нужно вставить или удалить символ из всей остальной части файла.
Текстовые файлы здесь не являются хорошим выбором - единственный безопасный способ их обновления - это прочитать файл до записи, которую вы хотите изменить, записать ее в новый файл по ходу работы, затем записать новую информацию, пропустить старую строку и прочитать остальную часть файла, записав ее в новый файл. Когда вы закончите, закройте оба файла, удалите оригинал и переименуйте новый.
Другая альтернатива состоит в том, чтобы прочитать весь текст - как вы есть - затем изменить свою запись и записать ее обратно в виде нового файла. Затем удалите старое и переименуйте новое.
Но... больницы никогда не являются однопользовательскими средами, поэтому это чревато опасностью и высоким риском потери данных в результате. Все, что нужно, - это два пользователя, пытающиеся изменить разные записи одновременно, и кто-то потеряет то, что они ввели!
Вместо этого подумайте об использовании базы данных-Sql Server или MySql-это хороший выбор - и пусть она сама обрабатывает файлы, а вы просто говорите ей, что вставлять, что обновлять и так далее - это также будет намного, намного быстрее, когда вы начнете запускать код!
Member 12897180
на самом деле я использовал альтернативный способ, который вы сказали, и он сработал, но проблема, с которой я столкнулся, заключается в том, что команда remove удаляет всю информацию о пациенте, а не только идентификационный номер, имя или фамилию... как я могу удалить объект, который просто хочу изменить?
спасибо за помощь :)
Member 12897180
если (secim == 2)
{
Приставка.WriteLine ("Aranan Hastaya ait TcKimlik Noyu Giriniz");
arananTc = консоль.Линия чтения();
Приставка.метод WriteLine("_________________________________________________________");
Приставка.WriteLine("TC KIMLIK\tADI\tSOYADI\tYAŞ\tTELEFON\tKayit NO\tCINSIYET");
//Hasta dosyasındakı bilgileri oku
string [] satirlar = файл.ReadAllLines("Hasta.txt");
//хаста dosyasındaki lineler Текер Текер Оку ва ayır
for (int i = 0; i & lt; satirlar.Длина; i++)
{
string[] satirdakiHastaBilgileri = satirlar[i]. Split(';');
if (satirdakiHastaBilgileri[0] == arananTc)
{
Приставка.Писать(satirdakiHastaBilgileri[0] + "\Т" + satirdakiHastaBilgileri[1] + "\т" + satirdakiHastaBilgileri[2] + "\т" + satirdakiHastaBilgileri[3] + "\т" + satirdakiHastaBilgileri[4] + "\т" + satirdakiHastaBilgileri[5] + "\т" + satirdakiHastaBilgileri[6]);
файл var = новый список<строка> По(системы.ИО.Файл.ReadAllLines("Hasta.txt"));
//Aranan Tc'ye göre diziler kullanarak Hasta dosya'sında bilgileri sil
файл.RemoveAt(i);
Файл.WriteAllLines("Hasta.txt", файл.Метод toArray());
// yeni dosya oluştur
StreamWriter yazici = файл.AppendText("Hasta.txt");
//ilk önce bilgileri yaz ondan sonra koşula geç
Приставка.метод WriteLine( );
// Oluşturulan dosya'nın içine istediğin bilgileri oluştur
Приставка.Пишите("Хастанин Ени ТК кимлик Носуну гириниз:");
hastaTc = консоль.Линия чтения();
Приставка.Писать("Hastanin giriniz Адини Ени :");
хастаади = консоль.Линия чтения();
Приставка.Писать("Hastanin Soyadini giriniz Ени :");
хастасояди = консоль.Линия чтения();
Приставка.Напишите ("Hastanin yeni Yaşini giriniz:");
hastaDogumTarih = конвертировать.ToInt32 (Консоль.Линия чтения());
Приставка.Напишите ("Hastanin yeni Telefonunu giriniz:");
hastaTel = консоль.Линия чтения();
Приставка.Напишите("Хастанин Ени Кайдин нет ");
хастакайитно = конвертировать.Тохар(Консоль.Линия чтения());
Приставка.Напишите ("Hastanin yeni Cinsiyetini giriniz:");
hastaCinsiyet = преобразовать.Тохар(Консоль.Линия чтения());
hastaBilgileri = hastaTc + "; " + hastaAdi +"; " + hastaSoyadi +"; " + hastaDogumTarih +"; " + hastaTel +"; " + hastaKayitNo +"; " + hastaCinsiyet;
язичи.WriteLine(hastaBilgileri);
Приставка.метод WriteLine();
язичи.Закрывать();
Приставка.WriteLine ("Кайит Башарийла экленди. :) ");
Приставка.Линия чтения();
}
Приставка.Линия чтения();
}
}
OriginalGriff
Нет, это не так.
Вы добавляете "обновленную" информацию в конец файла, не изменяя существующие данные.
Вы читаете файл в "файл", удаляете строку, затем добавляете новую строку в конце, прежде чем записать все обратно.
Поэтому используйте отладчик и посмотрите, что находится в hastaBilgileri непосредственно перед тем, как написать его.
Member 12897180
Ладно я попробую
Member 12897180
сэр, у меня все еще есть та же проблема, что я не мог дотянуться только до одного объекта из всей строки, я не буду переписывать всю строку только для обновления одной информации ... я разделил их здесь :
string[] satirdakiHastaBilgileri = satirlar[i]. Split(';');
и напишите их здесь :
hastaBilgileri = hastaTc + "; " + hastaAdi +"; " + hastaSoyadi +"; " + hastaDogumTarih +"; " + hastaTel +"; " + hastaKayitNo +"; " + hastaCinsiyet;
язичи.WriteLine(hastaBilgileri);
в этих командах я просто могу разделить каждую строку, которая является (hastaBilgileri), но я не мог разделить каждую информацию, которая является (hastaTC) или (hastaAdi) или (hastaSoyadi) или ......
вопрос здесь в том, как я мог бы разделить каждую информацию ?
спасибо за помощь :)
Рейтинг:
1
Member 12897180
спасибо, сэр, я действительно читал эти сайты, но я не понял, что такое XmlSerialization ?
если вы прочтете комментарий в решении 1, то поймете, что мне было нужно ..