C# 写入文件切断

C# 写入文件切断,c#,file-io,hunspell,C#,File Io,Hunspell,我的目标是获取一个句子文件,应用一些基本的过滤,并将剩余的句子输出到一个文件和终端。我正在使用拼写库 以下是我如何从文件中获取句子: public static string[] sentencesFromFile_old(string path) { string s = ""; using (StreamReader rdr = File.OpenText(path)) { s = rdr.ReadToE

我的目标是获取一个句子文件,应用一些基本的过滤,并将剩余的句子输出到一个文件和终端。我正在使用拼写库

以下是我如何从文件中获取句子:

    public static string[] sentencesFromFile_old(string path)
    {
        string s = "";
        using (StreamReader rdr = File.OpenText(path))
        {
            s = rdr.ReadToEnd();
        }
        s = s.Replace(Environment.NewLine, " ");
        s = Regex.Replace(s, @"\s+", " ");
        s = Regex.Replace(s, @"\s*?(?:\(.*?\)|\[.*?\]|\{.*?\})", String.Empty);
        string[] sentences = Regex.Split(s, @"(?<=\. |[!?]+ )");
        return sentences;
    }
publicstaticstring[]sentencesFromFile\u old(字符串路径)
{
字符串s=“”;
使用(StreamReader rdr=File.OpenText(路径))
{
s=rdr.ReadToEnd();
}
s=s.Replace(Environment.NewLine,“”);
s=Regex.Replace(s,@“\s+”,“”);
s=Regex.Replace(s,@“\s*?(?:\(.*?\)\[.*?\]\\{.*?\})”,String.Empty);

string[]Sequences=Regex.Split(s,@)(?您是否在完成编写后关闭
StreamWriter
?您可以尝试以下操作:

using(StreamWriter w = new StreamWriter(outFile))
{
    foreach(string x in xs)
    {
        if(Checker.check(x, speller))
        {
            w.WriteLine("[{0}]", x);
            Console.WriteLine("[{0}]", x);
        }
    }
}

执行完内部代码后,
using
语句将关闭
StreamWriter
(通过调用
StreamWriter
上的
Dispose
方法)。

您需要在关闭流之前刷新流

w.Flush();
w.Close();
using
语句(您也应该使用)将自动关闭流,但不会刷新流

using( var w = new StreamWriter(...) )
{
  // Do stuff
  w.Flush();
}

Np,我个人认为显式关闭流的自然行为也应该刷新它。我不确定他们为什么决定不这样做。你不需要显式刷新,但你确实需要显式关闭。只要关闭就会自动刷新它。问题是目前根本没有关闭写入程序。@Paul在ILSpy for StreamWriter中,似乎会在Dispose上调用Flush。无论如何,在关闭前调用Flush肯定不会有任何影响。但愿这是真的。我已经浏览了几十个错误,在这些错误中,流必须在关闭前刷新。@rsbarro:依我看,这会影响代码的可读性……尤其是如果你想在抛出了一个异常。看到(无意中)一个误导性的答案被接受是一件很遗憾的事情:(只是一个
使用
语句是更好的方法。
w.Flush();
w.Close();
using( var w = new StreamWriter(...) )
{
  // Do stuff
  w.Flush();
}