转储到控制台就像一个魅力,但不是一个文件,C#

时间:2010-06-04 10:21:55

标签: c# file

考虑这段代码:

    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()的工作方式类似于charm,但try块中的注释行File.WriteAllLines()不起作用。出现的错误消息是,所述文件{}正被另一个进程使用。

如果我使用StreamWriter或File.WriteAllLines()

,无论如何都会发生这种情况

帮助感谢。 Soham

3 个答案:

答案 0 :(得分:2)

File.WriteAllLines()创建,写入和关闭文件,因此您不希望调用r.Create();

答案 1 :(得分:1)

您应该删除以下行:

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

您正在创建输出文件并将其保持打开状态。 File.WriteAllLines()将为您创建文件(并在完成后关闭它)

答案 2 :(得分:1)

您的r对象正在打开它。