Dim crString = Environment.NewLine '= vbCrLf
Dim crBytes = Encoding.UTF8.GetBytes(crString)
Dim bytesRead(crBytes.Length - 1) as Byte
Dim iOffset As Integer = 0
Dim stringRead As String
Using fs = File.Open("G:\test.txt", FileMode.Open, FileAccess.ReadWrite)
While iOffset < fs.Length
fs.Seek(- (crBytes.Length + iOffset), SeekOrigin.End)
fs.Read(bytesRead,0, crBytes.Length)
stringRead = Encoding.UTF8.GetString(bytesRead)
If stringRead = crString Then
fs.SetLength(fs.Length - (crBytes.Length * iOffset + 1))
Exit While
End If
iOffset += 1
End While
End Using
私はFileStream
としてテキストファイルを開き、ファイルの最後にその位置を設定 - キャリッジリターン文字列の長さを。
次に、キャリッジリターンが見つかるまで、またはeofに達するまで、オフセットを減らしながら現在のバイトを読み取ります。
CRが見つかった場合は、それを削除します。 ループを削除してeofだけを確認したい場合は、 しかし、私はループを使用しているので、いくつかのvbNullString
がeofにある可能性があります。
私の例ではUTF8
エンコードを使用していますのでご注意ください。他のエンコーディングがある場合は、それに応じてそれを適応させる必要があります。実行前
あるtest.txt:コードスニペットの実行後
があるtest.txt:
EDIT:fs.SetLength
部分は、最後の文字の場合には間違っていましたファイルはCRではありませんでした。
ファイルを読み書きする方法を示すコードはありますか? – Malcor
まだありません。私は何かできるようになる前に、キャリッジリターンを取り除く必要があります。ファイルへの書き込みは簡単です。私はキャリッジリターンがなくなったら、後でファイルに書きます。タスクは別々になる予定です。 – pminogue
グローバルアイデアは、ファイルを読み取り/書き込みとして開き、最後の2文字(CR + LFは2文字)にポインタを置き、そこから書き込みを開始することです。それは最後の新しい行を取り除くでしょう... –