我有一文本文件,例如:
A  B
C  D
E  F我现在想把最后一行E  F 改成  1   2,
A  B
C  D
1  2请问怎么实现?如果不能直接修改,我想先删除最后一行
A  B
C  D然后再追加 1  2A  B
C  D
1  2这样又怎么实现呢?

解决方案 »

  1.   

    '应该与查找替换差不多吧!  
    Option Explicit
    Private Sub Command1_Click()
        Call ReplaceInFile("C:\test.txt", "x", "10000")
    End SubPrivate Sub ReplaceInFile(FileName As String, ReplaceStr As String, ReplaceWithStr As String)
    Dim FileNum As Long, strFileContent As String, strTemp As String    FileNum = FreeFile
        
        If Dir(FileName) <> "" Then
            Open FileName For Input As #FileNum
            While Not EOF(FileNum)
                Line Input #FileNum, strTemp
                strFileContent = strFileContent & strTemp & vbCrLf
            Wend
            Close #FileNum
            
            strFileContent = Replace(strFileContent, ReplaceStr, ReplaceWithStr, , , vbDatabaseCompare)
            
            Open FileName For Output As #FileNum
            Print #FileNum, strFileContent
            Close #FileNum
            
        End If
    End Sub
      

  2.   

    如果文件很大(几百M以上),就指定一个data buffer,然后一块一块读,直到吃到最后一块,记录最后一行开始处到EOF的offset,sw.basestream.seek(offset. seekorigin.end);// sw is a StreamWriter object;开始替换,然后sw.flush;
    如果文件不大,直接readtoend,然后回写
      

  3.   

    如果文件很大(几百M以上),就用FileStream打开二进制方式读写,
    指定一个data buffer,然后seek到倒数第一块,一块一块读,直到找到最后一个回车换行的位置,seek到此位置,写入即可~
      

  4.   

    如果对执行效率要求不高using System.IO;//……int line = 0
    StreamReader sr = new StreamReader(@"C:\1.txt");
    StreamWriter sw = new StreamWriter(@"C:\temp.txt");
    while (sr.Peek() != -1) 
    {
        string str = sr.ReadLine();
        line++;
        sw.WriteLine(str);
    }
    sw.WriteLine("1   2");
    sr.Close();
    sw.Close();
    File.Delete(@"C:\1.txt");
    File.Move(@"C:\temp.txt", @"C:\1.txt");
      

  5.   

    using System.IO;//……StreamReader sr = new StreamReader(@"C:\1.txt");
    StreamWriter sw = new StreamWriter(@"C:\temp.txt");
    while (sr.Peek() != -1) 
    {
        string str = sr.ReadLine();
        sw.WriteLine(str);
    }
    sw.WriteLine("1   2");//写入最后一行修改后的内容
    sr.Close();
    sw.Close();
    File.Delete(@"C:\1.txt");
    File.Move(@"C:\temp.txt", @"C:\1.txt");
      

  6.   

    有没有什么好的方法不copy文件,直接修改的?
      

  7.   

    private void button1_Click(object sender, EventArgs e)
    {
        FileStream vFileStream = new FileStream(@"c:\temp\temp.log",
            FileMode.Open, FileAccess.ReadWrite);
        byte[] vBuffer = new byte[0x1000];
        int vReadLength;
        int vReadCount = 0;
        bool vLineEnd = false;
        int j = 0;
        string vText = "Zswang 路过 " + DateTime.Now.ToString();
        do
        {
            vFileStream.Seek(-vBuffer.Length * ++vReadCount, SeekOrigin.End);
            vReadLength = vFileStream.Read(vBuffer, 0, vBuffer.Length);
            for (int i = vReadLength - 1; i >= 0; i--)
            {
                j++;
                if (vBuffer[i] == 10) 
                {
                    if (j == 1)
                    {
                        vLineEnd = true;
                        continue;
                    }
                    if (vReadCount > 1)
                    {
                        vBuffer = new byte[vFileStream.Length - j - 1];
                        vFileStream.Seek(j, SeekOrigin.End);
                        vReadLength = vFileStream.Read(vBuffer, 0, vBuffer.Length);
                        j = 0;
                    }
                    //textBox1.Text = Encoding.Default.GetString(vBuffer,
                    //    vReadLength - j + 1, j - 1); //读出最后一行
                    vFileStream.SetLength(vFileStream.Length - (j - 1));
                    vFileStream.Seek(0, SeekOrigin.End);
                    if (vLineEnd) vText += "\r\n";
                    vBuffer = Encoding.Default.GetBytes(vText);
                    vFileStream.Write(vBuffer, 0, vBuffer.Length);
                    break;
                }
            }
        } while (vReadLength < vBuffer.Length);
        vFileStream.Close();
    }
      

  8.   

    感谢zswang(伴水清清)(专家门诊清洁工) 
    搞定,结贴