微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

写入文件截止

如何解决写入文件截止

| 我的目标是获取一个句子文件,进行一些基本过滤,然后将剩余的句子输出文件和终端。我正在使用Hunspell库。 这是我从文件获取句子的方式:
    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*?(?:\\(.*?\\)|\\[.*?\\]|\\{.*?\\})\",String.Empty);
        string[] sentences = Regex.Split(s,@\"(?<=\\. |[!?]+ )\");
        return sentences;
    }
这是写入文件代码
        List<string> sentences = new List<string>(Checker.sentencesFromFile_old(path));
        StreamWriter w = new StreamWriter(outFile);
        foreach(string x in xs)
            if(Checker.check(x,speller))
            {
                w.WriteLine(\"[{0}]\",x);
                Console.WriteLine(\"[{0}]\",x);
            }
这是检查器:
    public static bool check(string s,NHunspell.Hunspell speller)
    {
        char[] punctuation = {\',\',\':\',\';\',\' \',\'.\'};
        bool upper = false;
        // Check the string length.
        if(s.Length <= 50 || s.Length > 250)
            return false;
        // Check if the string contains only allowed punctuation and letters.
        // Also disallow words with multiple consecutive caps.
        for(int i = 0; i < s.Length; ++i)
        {
            if(punctuation.Contains(s[i]))
                continue;
            if(Char.IsUpper(s[i]))
            {
                if(upper)
                    return false;
                upper = true;
            }
            else if(Char.IsLower(s[i]))
            {
                upper = false;
            }
            else return false;
        }
        // Spellcheck each word.
        string[] words = s.Split(\' \');
        foreach(string word in words)
            if(!speller.Spell(word))
                return false;
        return true;
    }
句子很好地打印在终端上,但文本文件截断了2015年汉字的中间句子。那是怎么回事? 编辑:当我删除
check
方法的某些部分时,文件将以2000或4000左右的不同长度被截断。删除拼写检查将完全消除截断。     

解决方法

您需要先关闭流,然后再冲洗流。
w.Flush();
w.Close();
using
语句(您也应使用)将自动关闭流,但不会刷新它。
using( var w = new StreamWriter(...) )
{
  // Do stuff
  w.Flush();
}
    ,完成写作后,您是否要关闭
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
方法)。     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。