如何解决写入文件截止
| 我的目标是获取一个句子文件,进行一些基本过滤,然后将剩余的句子输出到文件和终端。我正在使用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 举报,一经查实,本站将立刻删除。