2015-08-12 2 views
0

Я как бы новичок в кодировании, и я пытаюсь заменить слово в текстовом файле, но когда я запускаю программу, он дает мне "File is используется другой ошибки процесса»Файл недоступен, так как он используется другим процессом

private void btnSave1_Click(object sender, EventArgs e) 
     { 
      string DOB = dateTimePicker1.Value.ToString(); 
      string Fname = txtBFirstName.ToString(); 
      string Lname = txtBLastName.ToString(); 
      string IDnum = txtBIDnum.ToString(); 
      string Address = txtBAddress.ToString(); 
      string nationality = txtBNationality.ToString(); 
      //string gender = cmbGender.SelectedItem.ToString(); 
      // string marrStatus = cmbMaritialStatus.SelectedItem.ToString(); 
      StreamReader read = null; 

      //write to file 
      try 
      { 
       // var lines = File.ReadAllLines("CV.txt"); 
       string line; 
       read = new StreamReader("CurriculumVitae.txt"); 

       while ((line = read.ReadLine()) != null) 
       { 
        string text = File.ReadAllText("CurriculumVitae.txt"); 

        text = text.Replace("Empty", DOB); 
        File.WriteAllText("CurriculumVitae.txt", 
             File.ReadAllText("CurriculumVitae.txt") 
             .Replace("empty",DOB)); 

       } 



      } 
      catch (Exception exc) 
      { 

       MessageBox.Show(exc.Message); 
      } 
      finally 
      { 
       read.Close(); 
      } 

       //Open Next Form 
       Education objNextForm = new Education(); 
       objNextForm.Visible = true; 

} 
+0

О, пожалуйста, игнорируйте текст под моим вопросом, который был невинной ошибкой. – MTHO77

+0

Почему вы пытаетесь читать строки за строкой, но * then * 'ReadAllText'? В этом нет смысла. Вы также снова прочитаете файл, замените * снова *. – crashmstr

ответ

0

Во-первых, не используйте StreamReader при использовании File.ReadAllText, как это не требуется, то другая ошибка исходит от этой линии:

File.WriteAllText("CurriculumVitae.txt", File.ReadAllText("CurriculumVitae.txt").Replace("empty", DOB)); 

вы открываете тот же дважды, попробуйте что-то вроде этого:

string content = File.ReadAllText("CurriculumVitae.txt").Replace("empty", DOB); 
File.WriteAllText("CurriculumVitae.txt", content); 
0

Проблема с этих 3-х линий

read = new StreamReader("CurriculumVitae.txt"); 

string text = File.ReadAllText("CurriculumVitae.txt"); 

File.WriteAllText("CurriculumVitae.txt" 
     ,File.ReadAllText("CurriculumVitae.txt").Replace("empty",DOB)); 

Оба StreamReader и File.ReadAllText заблокирует файл. И всякий раз, когда они пытаются заблокировать один и тот же файл, будет ошибка

Вам следует попытаться сделать что-то однократно. Не пытайтесь открывать файл много раз. И не открывать тот же файл, прежде чем он закрыт

0

Вы можете просто взять эту часть вокруг вашего кода, так как вы не используете StreamReader вы создали:

while ((line = read.ReadLine()) != null) 
    { 
    ... 
    } 

И изменить File.WriteAllText ("CurriculumVitae.txt", File.ReadAllText ("CurriculumVitae.txt");

для

File.WriteAllText("CurriculumVitae.txt", text); 
0

Вы хотите, чтобы обновить вас r StreamReader, чтобы открыть файл в режиме «общего доступа», чтобы он не блокировал файл.

См. this question для получения более подробной информации о том, как это сделать.

0

Используйте либо StreamReader или ReadAllText, но не оба одновременно ... Кроме того, я бы действительно предлагаю сделать «usings» везде, где это возможно becuase это помогает много закрытия объектов (но не ваша первоочередная проблема здесь)

// It will free resources on its own. 
// 
using (StreamReader reader = new StreamReader("file.txt")) 
{ 
    line = reader.ReadLine(); 
} 
Console.WriteLine(line); 
} 
Смежные вопросы