2016-10-12 50 views
1

我知道这已被问过多次,但我仍然无法找到这是什么原因。我确定该文件没有被外部程序使用,所以原因必须在这个方法中。错误发生在第二次初始化StreamWriter对象的行中(int for循环)。该进程无法访问该文件的'文件路径',因为它正在被另一个进程使用

static void WriteData(PeopleContainer people) 
    { 
     var file = new StreamWriter(File.Open(Directory + Output1, FileMode.Create), Encoding.GetEncoding(1257)); 
     for (int i = 0; i < people.SeenByEveryone.Count; i++) 
     { 
      Film film = people.SeenByEveryone.GetFilm(i); 
      file.WriteLine("{1}{0}{2}{0}{3}{0}{4}{0}{5}{0}{6}{0}{7}{0}{8}", CsvSeparator, film.Title, film.Year, 
          film.Director, film.Genre, film.Company, film.BoxOffice, film.Actors[0], film.Actors[1]); 
     } 

     for (int i = 0; i < people.Count; i++) 
     { 
      Person person = people.GetPerson(i); 
      string path = String.Format("{0}Rekomendcija_{1}_{2}.csv", Directory, person.FirstName, person.LastName); 

      file = new StreamWriter(File.Open(path, FileMode.Create), Encoding.GetEncoding(1257)); 
      for (int j = 0; j < person.RecomemdedFilms.Count; j++) 
      { 
       Film film = person.RecomemdedFilms.GetFilm(j); 
       file.WriteLine("{1}{0}{2}{0}{3}{0}{4}{0}{5}{0}{6}{0}{7}{0}{8}", CsvSeparator, film.Title, film.Year, 
           film.Director, film.Genre, film.Company, film.BoxOffice, film.Actors[0], film.Actors[1]); 
      } 
     } 
    } 
+1

看做[的string.join](https://msdn.microsoft.com/en-us/library/57a79xd0%28v=vs.110%29.aspx?f= 255&MSPPError = -2147217396)而不是格式化一个字符串。 –

回答

2

当你完成它时,你应该处理你的Stream.Writer。

 using(var file = new StreamWriter(File.Open(Directory + Output1, FileMode.Create), Encoding.GetEncoding(1257))) 
     { 
      //your loop 
     } 

     for (int i = 0; i < people.Count; i++) 
     { 

      using(file = new StreamWriter(File.Open(path, FileMode.Create), Encoding.GetEncoding(1257))) 
      { 
       // other loop 
      } 
     } 

编辑:

像@enkryptor提到:如果你希望所有的推荐的电影是在第二循环的文件,你应该在你的循环使用StreamWriter。你也应该把FileMode.OpenOrCreate

using(file = new StreamWriter(File.Open(path, FileMode.OpenOrCreate), Encoding.GetEncoding(1257))) 
{ 
    for (int i = 0; i < people.Count; i++) 
    { 

      file.WriteLine(...//your stuff)   
    } 
} 
+1

从错误看来,人员集合不是唯一的。如果你重新打开文件FileMode.Create以前的文件将被覆盖 – oldovets

+0

第二'使用'是在错误的地方 – enkryptor

+0

@enkryptor它取决于他想做什么,由于某种原因,他的FileMode是创建总是如果我们想把所有文件模式应该是OpenOrCreate – mybirthname

相关问题