C#如何在不写入txt文件的情况下清除streamwriter缓冲区?
我正在Win7上开发C# 我需要使用Streamwriter写入txt文件C#如何在不写入txt文件的情况下清除streamwriter缓冲区?,c#,io,C#,Io,我正在Win7上开发C# 我需要使用Streamwriter写入txt文件 StreamWriter outfile = new StreamWriter(MY_PATH, true); foreach(a line of strings) { // process the line outfile.Write(String.Format(WIDTH + " " + WIDTH, num1Str+"\t", num2Str+"\t"));
StreamWriter outfile = new StreamWriter(MY_PATH, true);
foreach(a line of strings)
{
// process the line
outfile.Write(String.Format(WIDTH + " " + WIDTH, num1Str+"\t", num2Str+"\t"));
}
if all elements in line are "0"
// do not write anything to the file, clear outfile buffer
// WIDTH are constants. num1Str and num2Str are variables.
如何清除写入流缓冲区的内容
Flush不是一个解决方案,因为如果所有元素都为0,我不想写入文件。
任何帮助都将不胜感激 我相信你在找 更新:现在问题已经清楚了,您不需要
StreamWriter
,而是想利用MemoryStream
之类的工具。考虑下面的片段:
var writeToDisk = false;
var outfile = new MemoryStream();
foreach(a line of strings)
{
// process the line
// BTW: the `String.Format` you have here is exceptionally confusing
// and may be attributing to why everything is \0
outfile.Write(...);
// set the flag to `true` on some condition to let yourself know
// you DO want to write
if (someCondition) { writeToDisk = true; }
}
if (writeToDisk)
{
var bytes = new byte[outfile.Length];
outfile.Read(bytes, 0, outfile.Length);
File.WriteAllBytes(MY_PATH, bytes);
}
我相信你在找我 更新:现在问题已经清楚了,您不需要
StreamWriter
,而是想利用MemoryStream
之类的工具。考虑下面的片段:
var writeToDisk = false;
var outfile = new MemoryStream();
foreach(a line of strings)
{
// process the line
// BTW: the `String.Format` you have here is exceptionally confusing
// and may be attributing to why everything is \0
outfile.Write(...);
// set the flag to `true` on some condition to let yourself know
// you DO want to write
if (someCondition) { writeToDisk = true; }
}
if (writeToDisk)
{
var bytes = new byte[outfile.Length];
outfile.Read(bytes, 0, outfile.Length);
File.WriteAllBytes(MY_PATH, bytes);
}
我认为您需要的是
Any
来检查Any是否不是“0”,但也可以使用use
来正确处理
if(someString.Any(a=> a != '0')) //if any elements in line are not '0'
{
using(StreamWriter outfile = new StreamWriter(MY_PATH, true))
{
foreach(char a in someString)
{
outfile.Write(WIDTH + " " + WIDTH, num1Str+"\t", num2Str+"\t");
}
}
}
我认为您需要的是
Any
来检查Any是否不是“0”,但也可以使用use
来正确处理
if(someString.Any(a=> a != '0')) //if any elements in line are not '0'
{
using(StreamWriter outfile = new StreamWriter(MY_PATH, true))
{
foreach(char a in someString)
{
outfile.Write(WIDTH + " " + WIDTH, num1Str+"\t", num2Str+"\t");
}
}
}
如果行中的所有元素均为“0”
//不要向文件写入任何内容,请清除文件缓冲区
那你为什么不在写之前检查一下你的文章的内容呢
// process the line
string line = String.Format(WIDTH + " " + WIDTH, num1Str+"\t", num2Str+"\t");
if(!line.Trim().All(c => c == '0'))
outfile.Write(line);
如果行中的所有元素均为“0”
//不要向文件写入任何内容,请清除文件缓冲区
那你为什么不在写之前检查一下你的文章的内容呢
// process the line
string line = String.Format(WIDTH + " " + WIDTH, num1Str+"\t", num2Str+"\t");
if(!line.Trim().All(c => c == '0'))
outfile.Write(line);
Flush不是一个解决方案,因为如果所有元素都为0,我不想写入文件。应该删除缓冲区中的内容。@user2420472:那么您就不想使用
StreamWriter
。您已经将字节流式传输到磁盘。使用MemoryStream
,然后如果要写入磁盘,请使用文件。WriteAllBytes
并从MemoryStream
向其提供字节。刷新不是解决方案,因为如果所有元素都为0,我不想写入文件。应该删除缓冲区中的内容。@user2420472:那么您就不想使用StreamWriter
。您已经将字节流式传输到磁盘。改为使用MemoryStream
,如果您想写入磁盘,请使用文件。writealBytes
并从MemoryStream
向其提供字节。我想您错过了使用string.Format()
的要点。您的forloop做什么?它看起来像是为了好玩而循环书写。请你使用真实的代码,这样我们就可以看到什么取决于什么。因为你的“一行字符串”用在哪里?你去查韦斯吗?在这种情况下,你在哪里使用字符?好的,那么foreach有什么用呢?你是否把同一内容写了X次?num1Str和num2Str是的变量?它们是来自“字符串行”吗?@Thomas AndreèLian,num1Str和num2Str来自另一个数据结构。那么您的foreach循环在做什么?我想您没有抓住使用string.Format()
forloop做什么的要点?它看起来像是为了好玩而循环书写。请你使用真实的代码,这样我们就可以看到什么取决于什么。因为你的“一行字符串”用在哪里?你去查韦斯吗?在这种情况下,你在哪里使用字符?好的,那么foreach有什么用呢?你是否把同一内容写了X次?num1Str和num2Str是的变量?它们是否来自“字符串行”?@Thomas AndreèLian,num1Str和num2Str来自另一个数据结构。那么您的foreach循环在做什么?trim()。all()在这里不起作用,我有嵌入宽度等数字。谢谢。如果您的所有数字都是0
,它不会将该行写入文件。您的行仍然可以包含零。trim()仅按空格分区。行中有一些数字,比如宽度,它们是常量。trim().all()在这里不起作用,我有一些数字,比如嵌入的宽度。谢谢。如果您的所有数字都是0
,它不会将该行写入文件。您的行仍然可以包含零。trim()仅按空格分区。行中有一些数字,例如宽度,它们是常量。但答案上仍然没有复选标记,讨厌那些他们不接受任何东西的问题。因此,问题永远不会“完成”。它们不是“完整的”。它们是不断发展和改进的知识集合。问题作者找到答案仅仅是问题旅程的开始。它成为一种被许多未来访问者发现、使用、改进并再次使用的标准资源,才是真正的价值所在。但答案上仍然没有复选标记,讨厌那些他们不接受任何东西的问题。因此,问题永远不会“完成”。它们不是“完整的”。它们是不断发展和改进的知识集合。问题作者找到答案仅仅是问题旅程的开始。它成为一种被发现、使用、改进并被许多未来访问者再次使用的规范资源,才是真正的价值所在。