C# 将文本文件的大小与值进行比较
我正在写一个文本文件。我希望文本文件最大为1024B。当达到此限制时,我想显示一条消息,但如果(fi1.Length<1024)检查不起作用,则此C# 将文本文件的大小与值进行比较,c#,text-files,C#,Text Files,我正在写一个文本文件。我希望文本文件最大为1024B。当达到此限制时,我想显示一条消息,但如果(fi1.Length
string file1 = "firstFile.txt";
TextWriter tx1 = new StreamWriter(new FileStream(file1, FileMode.Append));
FileInfo fi1 = new FileInfo(file1);
if (fi1.Length < 1024)
{
tx1.WriteLine("Babloooooooooooooooooo {0} ", i);
}
else
{
Console.WriteLine("Limit reached")
}
stringfile1=“firstFile.txt”;
TextWriter tx1=新的StreamWriter(新的文件流(file1,FileMode.Append));
FileInfo fi1=新的FileInfo(file1);
如果(图1.1长度<1024)
{
tx1.WriteLine(“babloooooooo{0}”,i);
}
其他的
{
控制台写入线(“达到限制”)
}
在将文本保存到文件之前,请检查字符串是否大于1024。如果是只取一部分,则保存此部分并显示消息
您应该知道,文件大小取决于编码
var str = "asdasdasd";
using (var sw = new StreamWriter("file.txt"))
{
var temp = str;
if (temp.Length > 1024)
{
temp = temp.Substring(0, 1024);
Console.WriteLine("Limit reached");
}
sw.Write(temp);
}
在将文本保存到文件之前,请检查字符串是否大于1024。如果是只取一部分,则保存此部分并显示消息
您应该知道,文件大小取决于编码
var str = "asdasdasd";
using (var sw = new StreamWriter("file.txt"))
{
var temp = str;
if (temp.Length > 1024)
{
temp = temp.Substring(0, 1024);
Console.WriteLine("Limit reached");
}
sw.Write(temp);
}
在将文本保存到文件之前,请检查字符串是否大于1024。如果是只取一部分,则保存此部分并显示消息
您应该知道,文件大小取决于编码
var str = "asdasdasd";
using (var sw = new StreamWriter("file.txt"))
{
var temp = str;
if (temp.Length > 1024)
{
temp = temp.Substring(0, 1024);
Console.WriteLine("Limit reached");
}
sw.Write(temp);
}
在将文本保存到文件之前,请检查字符串是否大于1024。如果是只取一部分,则保存此部分并显示消息
您应该知道,文件大小取决于编码
var str = "asdasdasd";
using (var sw = new StreamWriter("file.txt"))
{
var temp = str;
if (temp.Length > 1024)
{
temp = temp.Substring(0, 1024);
Console.WriteLine("Limit reached");
}
sw.Write(temp);
}
检查文件信息只能在第一次使用。您在示例代码中获得的信息仅与该时刻相关,不会跟踪事后对文件所做的任何更改
问题的实际原因是,在执行检查时,关联文本编写器的缓冲区尚未刷新。当您调用写入文本时,它将被放入内存中,直到缓冲区已满,或者您手动刷新它。每次调用后刷新文本编写器,并检查流的长度以获得预期结果
我在下面提供了一个示例,它可以满足您的需求
string file1 = "firstFile.txt";
// Placing these resources (FileStream and TextWriter) in using blocks ensures that their resources are released when you are done
// with them.
using (Stream fs = new FileStream(file1, FileMode.Append))
using (TextWriter tx1 = new StreamWriter(fs))
{
// This will only keep track of the file information when you call it.
// Any subsequent changes to the file will not update this variable.
FileInfo fi1 = new FileInfo(file1);
if (fi1.Length < 1024)
{
tx1.WriteLine("Babloooooooooooooooooo ");
// If you don't flush this line, you won't get an up to date value for 'length' below.
// Comment it out, and see for yourself.
tx1.Flush();
Console.WriteLine("The length is...", fs.Length);
}
else
{
Console.WriteLine("Limit reached");
}
}
stringfile1=“firstFile.txt”;
//将这些资源(FileStream和TextWriter)放在using块中可以确保在完成时释放它们的资源
//和他们在一起。
使用(Stream fs=newfilestream(file1,FileMode.Append))
使用(TextWriter tx1=新的StreamWriter(fs))
{
//这将仅在您调用文件信息时跟踪它。
//对文件的任何后续更改都不会更新此变量。
FileInfo fi1=新的FileInfo(file1);
如果(图1.1长度<1024)
{
tx1.WriteLine(“巴布鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁”);
//如果不刷新此行,则无法获得下面“长度”的最新值。
//评论出来,自己看看。
tx1.Flush();
Console.WriteLine(“长度为…”,fs.length);
}
其他的
{
控制台写入线(“达到限制”);
}
}
还应该提到的是,手动刷新writer和streams会带来性能损失,因此它并不总是最佳解决方案。在这种情况下,由于您要处理的文件大约为1k,所以这并没有什么区别,但对于具有许多写入操作的较大文件,我不推荐使用它
此外,您将注意到TextWriter和FileStream实例都放在using块中。这是公开接口的任何类型的最佳实践。您始终可以手动处理,但将确保资源得到正确清理,即使出现异常。检查文件信息只会在第一次工作。您在示例代码中获得的信息仅与该时刻相关,不会跟踪事后对文件所做的任何更改
问题的实际原因是,在执行检查时,关联文本编写器的缓冲区尚未刷新。当您调用写入文本时,它将被放入内存中,直到缓冲区已满,或者您手动刷新它。每次调用后刷新文本编写器,并检查流的长度以获得预期结果
我在下面提供了一个示例,它可以满足您的需求
string file1 = "firstFile.txt";
// Placing these resources (FileStream and TextWriter) in using blocks ensures that their resources are released when you are done
// with them.
using (Stream fs = new FileStream(file1, FileMode.Append))
using (TextWriter tx1 = new StreamWriter(fs))
{
// This will only keep track of the file information when you call it.
// Any subsequent changes to the file will not update this variable.
FileInfo fi1 = new FileInfo(file1);
if (fi1.Length < 1024)
{
tx1.WriteLine("Babloooooooooooooooooo ");
// If you don't flush this line, you won't get an up to date value for 'length' below.
// Comment it out, and see for yourself.
tx1.Flush();
Console.WriteLine("The length is...", fs.Length);
}
else
{
Console.WriteLine("Limit reached");
}
}
stringfile1=“firstFile.txt”;
//将这些资源(FileStream和TextWriter)放在using块中可以确保在完成时释放它们的资源
//和他们在一起。
使用(Stream fs=newfilestream(file1,FileMode.Append))
使用(TextWriter tx1=新的StreamWriter(fs))
{
//这将仅在您调用文件信息时跟踪它。
//对文件的任何后续更改都不会更新此变量。
FileInfo fi1=新的FileInfo(file1);
如果(图1.1长度<1024)
{
tx1.WriteLine(“巴布鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁鲁”);
//如果不刷新此行,则无法获得下面“长度”的最新值。
//评论出来,自己看看。
tx1.Flush();
Console.WriteLine(“长度为…”,fs.length);
}
其他的
{
控制台写入线(“达到限制”);
}
}
还应该提到的是,手动刷新writer和streams会带来性能损失,因此它并不总是最佳解决方案。在这种情况下,由于您要处理的文件大约为1k,所以这并没有什么区别,但对于具有许多写入操作的较大文件,我不推荐使用它
此外,您将注意到TextWriter和FileStream实例都放在using块中。这是公开接口的任何类型的最佳实践。您始终可以手动处理,但将确保资源得到正确清理,即使出现异常。检查文件信息只会在第一次工作。您在示例代码中获得的信息仅与该时刻相关,不会跟踪事后对文件所做的任何更改
你问题的真正原因是什么