考虑这段代码:
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
答案 0 :(得分:2)
File.WriteAllLines()创建,写入和关闭文件,因此您不希望调用r.Create();
答案 1 :(得分:1)
您应该删除以下行:
r = new FileInfo(Path.Combine(destpath,f.Name));
r.Create();
您正在创建输出文件并将其保持打开状态。 File.WriteAllLines()将为您创建文件(并在完成后关闭它)
答案 2 :(得分:1)
您的r
对象正在打开它。