如何将一个文本文件的内容复制到另一个长度减小的文本文件

本文关键字:文本 文件 另一个 复制 一个 | 更新日期: 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);而不是整个usingStreamWriter