转储到控制台就像一个符咒,但不是一个文件,C#
考虑这段代码:转储到控制台就像一个符咒,但不是一个文件,C#,c#,file,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 = Dire
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.writeAllines()不工作。出现的错误消息是,所述文件{}正被另一个进程使用
如果我使用StreamWriter或File.writeAllines(),无论发生什么情况,都会发生这种情况
谢谢你的帮助。
Soham您应该删除以下行:
r = new FileInfo(Path.Combine(destpath,f.Name));
r.Create();
您正在创建输出文件并保持其打开状态。File.writeAllines()将为您创建文件(完成后将其关闭)您应该删除以下行:
r = new FileInfo(Path.Combine(destpath,f.Name));
r.Create();
您正在创建输出文件并保持其打开状态。File.writeAllines()将为您创建文件(完成后将其关闭)您的
r
对象将其保持打开状态。您的r
对象将其保持打开状态。File.writeAllines()创建、写入并关闭文件,因此您不希望调用r.create() File.writeAllines()创建、写入和关闭文件,因此您不希望调用r.Create() 哇!谢谢!我怀疑这个问题,但从没想过Create()会让文件保持打开状态。谢谢!谢谢!我怀疑这个问题,但从没想过Create()会让文件保持打开状态。谢谢Hanks Anton,我没意识到r.Create()会保持打开谢谢Anton,我没意识到r.Create()会保持打开