2014-02-14 3 views
1

Я хочу читать и писать в одно и то же время в текстовом файле. Как я могу это сделать? Я искал в Интернете, но я не очень понимаю. В этом действии я хочу использовать инструмент OpenFileDialog. Это код:Прочитать текстовый файл и записать с изменениями

private void controlla_Click(object sender, EventArgs e) 
{ 
    Regex rgx = new Regex(@"\d"); 

    if (string.IsNullOrWhiteSpace(text_scrivi.Text) || rgx.IsMatch(text_scrivi.Text)) 
     MessageBox.Show("Errore. Bisogna inserire una parola"); 
    else 
    { 
     string line; 
     string sen_text = text_scrivi.Text.Trim(); 
     //MessageBox.Show(sen_text); 
     bool esito = true; 
     StreamReader file = new StreamReader(@"%USERPROFILE%\Desktop\Ghilardi\Parole\280000_parole_italiane"); 
     while ((line = file.ReadLine()) != null && (esito)) 
     { 
      if (string.Compare(line, sen_text) == 0) 
      { 
       MessageBox.Show("La Parole e' presente nel vocabolario"); 
       esito = false; 
      } 

     } 
     file.Close(); 
     if (esito) 
     { 
      DialogResult scelta = MessageBox.Show("La Parole non è presente nel vocabolario", "Salvare Nuova Parola", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question); 
      if (scelta == DialogResult.No) 
       text_scrivi.Text = ""; 
      else 
       **if (scelta == DialogResult.Yes) 
       { 

       \\I Want open file, read one line at time, and write in a determined position. I don't know, how open file in read and write modal.  

       }** 
       else 
        text_scrivi.Text = ""; 
     } 
    } 
} 
+0

Можете ли вы разместить код? Ваш вопрос непонятен. Существует много способов выполнить файл IO в C#. – evanmcdonnal

+0

Точно как вы хотите читать и писать одновременно? Вы должны быть конкретными. –

+0

Запись в файл, пока вы читаете, как правило, плохая идея. Это возможно *, строго говоря, но я настоятельно рекомендую избегать этого, если вы не уверены в том, что вам нужно. – Servy

ответ

2

Самый простой способ читать записи из файлов является использование File.ReadAllText и File.WriteAllText однако вы не читали бы в письменной форме, в то же время. Кроме того, эти методы не потоковый файл (он загружается в память все сразу), поэтому они, скорее всего, вызовут OutOfMemoryExceptions, если вы работаете с большими файлами, в этом случае лучший маршрут (IMO) является использование StreamReader и StreamWriter

Вот пример;

string file = File.ReadAllText(@".\path\to\file.txt"); 
file = file + "Some string I'm adding to my file"; 
File.WriteAllText(@".\path\to\file.txt", file); // note this overwrites the file 

Если вам нужно идти маршрут StreamReader/StreamWriter я бы рекомендовал просто глядя на примеры на MSDN.

http://msdn.microsoft.com/en-us/library/system.io.streamreader(v=vs.110).aspx

EDIT: Из того, что ОП сказал в комментарии я думаю ReadAllLines это лучший выбор, вот пример;

string[] lines = File.ReadAllLines(@".\path\to\file.txt"); 

foreach (int i = 0; i < lines.Length; i++) 
{ 
     string forUser = lines[i]; 
     // show user the line and let them edit it; 
     // somethign like forUser = myTextBoxOrWhatever.Text; 
     // do validation if yo uwant 
     lines[i] = forUser; // this updates your version of the file with the users changes 
     // update display if need be 
} 

File.WriteAllLines(@".\path\to\file.txt", lines); 
// this will overwrite the file with the new version 

Обратите внимание, что когда пользователь «редактирует файл», они не редактируют файл напрямую. У вас есть копия hte-файла в памяти (RAM), и пользователь редактирует это. После того, как пользователь будет готов, вы перезапишете весь файл с версией в памяти. Нет причин для чтения и записи одновременно для выполнения этой задачи.

Если файл слишком большой для использования ReadAllLines, проблема усложняется. Способ сделать это - прочесть его по строкам с помощью StreamReader, записать вывод в файл темпа по строке StreamWriter, после чего после того, как все будет готово, удалите исходный файл и измените имя временного файла.

+1

Как и сам ваш ответ, вы не пишете файл, пока вы читаете его. Вы конкретно заявляете, что не отвечаете на вопрос. Таким образом, вы не отвечаете на вопрос ... – Servy

+0

@Servy omg, вы просто боль в сервисе assa ... Очевидно, OP не хочет писать и читать файл одновременно, он просто не делает Не знаю, как сформулировать свой вопрос. Серьезно, разве вы никогда не помогали начинающему программисту в вашей жизни? – evanmcdonnal

+0

Если он не знает, как правильно сформулировать свой вопрос, тогда * помогите ему правильно сформулировать свой вопрос *. В противном случае кто-то, кто должен читать и писать в файл одновременно, найдет этот вопрос через Google и получит ответ, который им совсем не поможет. – Servy

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