'应该与查找替换差不多吧! 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
Open FileName For Output As #FileNum Print #FileNum, strFileContent Close #FileNum
End If End Sub
如果文件很大(几百M以上),就指定一个data buffer,然后一块一块读,直到吃到最后一块,记录最后一行开始处到EOF的offset,sw.basestream.seek(offset. seekorigin.end);// sw is a StreamWriter object;开始替换,然后sw.flush; 如果文件不大,直接readtoend,然后回写
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
如果文件不大,直接readtoend,然后回写
指定一个data buffer,然后seek到倒数第一块,一块一块读,直到找到最后一个回车换行的位置,seek到此位置,写入即可~
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");
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");
{
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();
}
搞定,结贴