如何将一个文本文件的内容复制到另一个长度减小的文本文件
本文关键字:文本 文件 另一个 复制 一个 | 更新日期: 2023-09-27 18:30:25
我有一个大约 5,000 行的文本文件,我想将其内容复制到另一个文件,但只有每行的前 38 个字符。
我目前有这个代码:
private void button1_Click(object sender, EventArgs e)
{
string line, line2;
System.IO.StreamReader file = new System.IO.StreamReader(@"c:'test.txt");
while ((line = file.ReadLine()) != null)
{
line2 = line.Substring(0, 38);
using (System.IO.StreamWriter files = new System.IO.StreamWriter(@"C:'test2.txt"))
{
files.WriteLine(line2);
}
}
file.Close();
}
它只复制最后一行。 :(
因为你在循环中重写了新文件。您应该在循环中创建新字符串(为此使用 stringBuilder 会更有效),但将新文件写出循环:
string line;
var sb = new StringBuilder();
System.IO.StreamReader file = new System.IO.StreamReader(@"c:'test.txt");
while ((line = file.ReadLine()) != null)
sb.AppendLine(line.Substring(0, Math.Min(38, line.Length)));
file.Close();
using (System.IO.StreamWriter files = new System.IO.StreamWriter(@"C:'test2.txt"))
{
files.WriteLine(sb.ToString());
}
或者做更短的时间
var result = File.ReadAllLines(@"c:'test.txt")
.Select(m => m.Substring(0, Math.Min(38, m.Length)));
File.WriteAllLines(@"C:'test2.txt", result);
您需要在
while 循环之前移动 'file2' 的创建。您还应该在使用中创建"文件":。那时,您无需为任何一个打电话关闭。
private void button1_Click(object sender, EventArgs e)
{
string line;
using (System.IO.StreamReader file = new System.IO.StreamReader(@"c:'test.txt"))
using (System.IO.StreamWriter file2 = new System.IO.StreamWriter(@"C:'test2.txt"))
while ((line = file.ReadLine()) != null)
{
string line2 = line.Substring(0, 38);
file2.WriteLine(line2);
}
}
每次
。
调用文件时,文件的.WriteLine
都会覆盖整个文件。因此,将整个代码放在using
块中,或将true
添加到StreamWriter
的参数中,以告诉它附加到文件而不是覆盖。
选项 1:
private void button1_Click(object sender, EventArgs e)
{
string line, line2;
using (System.IO.StreamWriter files = new System.IO.StreamWriter(@"C:'test2.txt"))
{
System.IO.StreamReader file = new System.IO.StreamReader(@"c:'test.txt");
while ((line = file.ReadLine()) != null)
{
line2 = line.Substring(0, 38);
files.WriteLine(line2);
}
file.Close();
}
}
选项 2:
private void button1_Click(object sender, EventArgs e)
{
string line, line2;
System.IO.StreamReader file = new System.IO.StreamReader(@"c:'test.txt");
while ((line = file.ReadLine()) != null)
{
line2 = line.Substring(0, 38);
using (System.IO.StreamWriter files = new System.IO.StreamWriter(@"C:'test2.txt",true))
{
files.WriteLine(line2);
}
}
file.Close();
}
最后,如果您选择使用StringBuilder,则可以使用System.IO.File.WriteAllText(@"C:'test2.txt", stringHere);
而不是整个using
和StreamWriter
块