Вам не нужно linecounter()
. Количество строк lines.Length
. Но зачем вам этот массив directory
? Вы заполняете его, но нигде не используете.
Другая важная проблема заключается в том, что вы создаете StreamWriter
внутри foreach
l oop. Вы должны открыть файл до l oop и закрыть его после l oop, чтобы он заработал. Кроме того, вы смешиваете запись currentRecord
типа record
и запись строк типа string в выходной файл. Это не может работать.
Вы также помещаете txtForename.Text
в currentRecord.surname
вместо currentRecord.forename
и наоборот.
Я предлагаю сначала применить изменения в массиве lines
и затем, чтобы записать этот массив lines
обратно в файл с File.WriteAllLines
, который является операцией симметрии c для File.ReadAllLines
.
Я применяю изменение непосредственно к массиву fields
, так что Я могу преобразовать его обратно в строку с помощью String.Join
(это операция симметрии c в String.Split
).
public void updateName()
{
// Do this conversion before the loop. We need to do it only once.
int selectedCode = Convert.ToInt32(txtExtCode.Text);
string[] lines = File.ReadAllLines(directoryFile);
for (int i = 0; i < lines.Length; i++)
{
// Split current line into three fields
string[] fields = lines[i].Split(',');
int extCode = Convert.ToInt32(fields[2]);
if (extCode == selectedCode)
{
fields[0] = txtSurname.Text;
fields[1] = txtForename.Text;
lines[i] = String.Join(",", fields);
// If the extension code is unique, leave the for-loop
break;
}
}
File.WriteAllLines(directoryFile, lines);
}
Я также использую for
вместо foreach
, чтобы имеют индекс i
, так что я могу заменить одну строку в массиве lines
с указанным индексом c.
Я не знаю, является ли код расширения в файле каталога уникальным , Если это так, вы можете преждевременно выйти из режима l oop с помощью break
.
.