2010-06-04 25 views
0

考慮這段代碼:轉儲到控制檯的工作原理就像一個魅力,而不是一個文件,C#

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace DataExtractor 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string destpath = Directory.GetCurrentDirectory(); 
      destpath = Path.Combine(destpath, "DIR"); 
      DirectoryInfo Dest = Directory.CreateDirectory(destpath); 
      DirectoryInfo Source = new DirectoryInfo(Directory.GetCurrentDirectory() + "\\IEOD"); 
      FileInfo[] fiArr = Source.GetFiles("*.csv"); 
      Console.WriteLine("Search Date:"); 
      string srchdate = Console.ReadLine(); 
      FileInfo r; 
      foreach (FileInfo f in fiArr) 
      { 
       r = new FileInfo(Path.Combine(destpath,f.Name)); 
       r.Create(); 
       string path = Path.Combine(destpath, f.Name); 
       string[] lines = File.ReadAllLines(f.FullName); 
       var output = lines.Where(line => line.Split(',')[0] == srchdate); 

         try 
         { 
          //File.WriteAllLines(path, output.ToArray()); 
          Console.WriteLine(output.ToArray()); 
          Console.Write("\n"); 

         } 
         catch(Exception ex) 
         { 
          Console.WriteLine(ex.StackTrace); 
         } 


       } 



      Console.ReadKey(); 


     } 
    } 
} 

什麼是錯的這一段代碼?在try塊內部,Console.WriteLine()的工作方式類似於魅力,但try塊中的註釋行File.WriteAllLines()不起作用。出現的錯誤消息是,該文件{}正在被另一個進程使用。

這是發生無論是什麼,如果我使用的StreamWriter或File.WriteAllLines()

幫助表示讚賞。 Soham

回答

1

您應該刪除以下行:

r = new FileInfo(Path.Combine(destpath,f.Name)); 
    r.Create(); 

要創建的輸出文件和離開它打開。 File.WriteAllLines()將爲您創建文件(並在完成時關閉它)

+0

哇!非常感謝!我懷疑這個問題,但從來沒有想過Create()會使文件保持打開狀態。謝謝 – Soham 2010-06-04 11:50:28

1

您的r對象正在將其保持打開狀態。

+0

謝謝安東,我沒有意識到r.Create()會保持打開狀態 – Soham 2010-06-04 11:50:50

2

File.WriteAllLines()創建,寫入和關閉文件,所以你不想調用r.Create();

相關問題