2015-07-20 3 views
0

Я получаю сообщение об ошибке (IOException), что я не знаю, где ошибка. Вот он код:Ошибка при доступе к файлу C#

Конструктор:

private const int MAX = 200; 
    private String path = "\\Registros\\reg"; 
    private FileStream fs; 
    private BinaryWriter bw = null; 
    private BinaryReader br = null; 
    private int N; 
    private long pos; 

public Manejo_Ficheros(String filepath){ 
    this.path = filepath; 
     if(!File.Exists(path+".dat")){ 
      fs = new FileStream(path + ".dat", FileMode.Create); 
      this.N = 0; 
      bw = new BinaryWriter(fs); 
      fs.Seek(0,SeekOrigin.Begin); 
      bw.Write(N); 
     }else{ 
      fs = new FileStream(path + ".dat", FileMode.Open); 
      br = new BinaryReader(fs); 
      fs.Seek(0,SeekOrigin.Begin); 
      this.N = br.ReadInt32();  
     } 
} 

Здесь Writting:

public void escribirRegistro(Persona p) 
    { 
     pos = 4 + this.N * MAX; 
     int i = (int)pos; 
     bw = new BinaryWriter(fs); 
     bw.Seek(i, SeekOrigin.Begin); 
     bw.Write(p.ID); 
     bw.Write(p.nombre); 
     bw.Write(p.apellidos); 
     bw.Write(p.Num); 
     bw.Write(p.Nced); 
     bw.Write(p.pais); 
     bw.Write(p.observaciones); 
     bw.Write(p.Anac); 
     bw.Write(p.tPer); 
     this.N += 1; 
     fs.Seek(0, SeekOrigin.Begin); 
     bw.Write(N); 
     bw.Close(); 

     fs.Close(); 
    } 

Как вы можете видеть, я использую флеш. Он получит тип объекта «Persona», а затем «Writting to File».

Письмо работает нормально. Но когда я хочу использовать метод чтения см:

public Persona[] leerTodos() 
    { 
     Persona[] p = new Persona[this.N]; 
     br = new BinaryReader(fs); 
     for (int i = 0; i < p.Length; i++) 
     { 
      pos = 4+i*MAX; 
      br.BaseStream.Seek(pos, SeekOrigin.Begin); 

      Persona p1 = new Persona(); 
      p1.ID = br.ReadInt32(); 
      p1.nombre = br.ReadString(); 
      p1.apellidos = br.ReadString(); 
      p1.Num = br.ReadString(); 
      p1.Nced = br.ReadString(); 
      p1.pais = br.ReadString(); 
      p1.observaciones = br.ReadString(); 
      p1.Anac = br.ReadInt32(); 
      p1.tPer = br.ReadString(); 
      p[i] = p1; 
     } 
     return p; 
    } 

Прикладные перерывы в этой линии fs = new FileStream(path + ".dat", FileMode.Open); Процесс не может получить доступ к файлу «C: \ Users \ Аллана \ Desktop \ data.dat», потому что он используется другим процессом.

Вещь в том, что Написание этого не происходит. Я не знаю, что происходит не так.

ответ

1

Попробуйте сделать это в вашем коде

public Manejo_Ficheros(String filepath){ 
    this.path = filepath; 
    if(!File.Exists(path+".dat")){ 
     using (fs = new FileStream(path + ".dat", FileMode.Create)); 
     { 
      this.N = 0; 
      bw = new BinaryWriter(fs); 
      fs.Seek(0,SeekOrigin.Begin); 
      bw.Write(N); 
     } 
    }else{ 
     using (fs = new FileStream(path + ".dat", FileMode.Open)) 
     { 
      br = new BinaryReader(fs); 
      fs.Seek(0,SeekOrigin.Begin); 
      this.N = br.ReadInt32(); 
     }  
    } 
+0

Спасибо, это сработало –

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