2015-06-04 4 views
0

У меня есть код здесь и на основе ввода пользователем, я бы хотел изменить выбранную мной линию выбора. Тем не менее, я могу только временно изменить строку текста, и когда я снова напишу файл, текст не будет перезаписан навсегда.Как редактировать номера в файле .txt?

Вот мой код:

public struct classMates 
{ 
    public string first; 
    public string last; 
    public int ID; 
} 


static classMates[] readClassMates(classMates[] classMateInfo) 
{ 
    StreamReader sr = new StreamReader(@"C:\class.txt"); 
    int count = 0; 
    while (!sr.EndOfStream) 
    { 
     classMateInfo[count].first = sr.ReadLine(); 
     classMateInfo[count].last = sr.ReadLine(); 
     string idTemp = sr.ReadLine(); 
     classMateInfo[count].ID = Convert.ToInt32(idTemp); 
     count++; 
    } 
    sr.Close(); 
    return classMateInfo;    
} 

static void editClassMates(classMates[] classMateInfo) 
{ 
    Console.Write("Who's number would you like to change? "); 
    string classMateInput = Console.ReadLine(); 
    for (int i = 0; i < classMateInfo.Length; i++) 
    { 
     if (classMateInfo[i].first.Equals(classMateInput)) 
     { 
      Console.Write("Enter new number: "); 
      string temp = Console.ReadLine(); 
      int classMateNumber = Convert.ToInt32(temp); 
      classMateInfo[i].ID = classMateNumber; 
      Console.WriteLine("You have successfully changed {0}'s number to {1}.", classMateInfo[i].first,classMateInfo[i].ID.ToString()); 
     } 
    } 
} 

static void Main() 
{ 
    classMates[] classMateInfo = new classMates[43]; 

    listClassMates(classMateInfo); 
    editClassMates(classMateInfo); 
    listClassMates(classMateInfo); 
} 

Я знаю, что я имел в виду использовать File.WriteAllText(), но я не знаю, как использовать этот фрагмент в мой код.

+4

Не совсем ясно, какая проблема у вас есть, но файл 'File.WriteAllText' не является особенно очевидным решением. Я бы, вероятно, начал писать метод преобразования значения classMates в строку ... Как отдельный вопрос, существуют различные проблемы с вашим кодом - например, использование изменяемых типов значений, соглашений об именах, доступа к ресурсу без ' используя 'statement' или' try'/'finally'. Конечно, стоит почитать эти вопросы. –

+0

Вы уже знаете, как читать файл. Просто напишите метод, который записывает файл и в основном делает то же самое. Но теперь с помощью StreamWriter. –

+0

Как сказано выше, он только временно записывает файл. Когда я хочу изменить их число, я ввожу новый номер и изменяю идентификатор в файле class.txt. Однако это не надолго. –

ответ

-2

Я не вижу, чтобы вы писали что-либо в файл.

Console.Write("Enter new number: "); 
string temp = Console.ReadLine(); 
int classMateNumber = Convert.ToInt32(temp); 
classMateInfo[i].ID = classMateNumber; 
Console.WriteLine("You have successfully changed {0}'s number to {1}.", classMateInfo[i].first,classMateInfo[i].ID.ToString()); 

следует ожидать, что вы сделали что-то вроде:

rs.Writeline('foo'); 

Но, возможно, вам нужен StreamWriter для этого.

0

Возможно, вы ожидаете легкого ответа, но на самом деле вам нужен собственный код, который вам нужно придумать сами. Если вы в LINQ и действительно хотите использовать метод File.WriteAllText() вы можете использовать этот Oneliner я написал для вас, что я не проверял:

File.WriteAllText(@"C:\class.txt", string.Join(Environment.NewLine, (from cm in classMateInfo select string.Format("{1}{0}{2}{0}{3}", Environment.NewLine, cm.first, cm.last, cm.ID)).ToArray())); 

который создает массив строк из вашего classMateInfo сцепляет массив с использованием новой строки в качестве разделителя и запись всей строки в указанный файл.

Смежные вопросы