Programmieren - alles kontrollieren 4.941 Themen, 20.715 Beiträge

Datei auslesen

(Anonym) / 2 Antworten / Baumansicht Nickles

Hallo zusammen,

ich möchte in VB in einer Datei ein paar Bytes umschreiben:
Die Datei habe ich mit "Open fileName.Path For Binary Access Read Write As nr" geöffnet.
Mit "Get nr, position, str" kann ich Bytes auslesen (str hat feste Länge). Mit "Put nr, position "neuer Text"" schreibe ich neuen Text in die Datei.

Meine Fragen: Ist das grundsätzlich schonmal richtig?
Geht das evtl einfacher?

!!! Was passiert, wenn ich zB an Position 4 "Text" schreibe, werden die alten Daten überschrieben oder womöglich weitergeschoben?
Wie kann ich (am Ende einer Datei) Bytes löschen, die Datei also kleiner machen?

Danke fürs Antworten

bei Antwort benachrichtigen
(Anonym) Nachtrag zu: „Datei auslesen“
Optionen

Hallo
liest sich ganz gut.
Ich würde allerdings die Datei (wenn sie nicht sehr groß ist) in ein Byte-Array einlesen

dim d_size as long (die Größe der Datei)
dim wert(d_size) as byte

dann einlesen

jetzt kannst Du in Ruhe die Bytes in Deiner Datei bearbeiten, auch am Ende Bytes löschen und dann alles zurückschreiben.

Vorteil : die Datei wird "offline" manipuliert, das Herumfuhrwerekn in geöffneten Dateien kann schiefgehen.
außerdem kannst Du mit der Byte-Variable sicher sein, daß alle Werte richtig ausgelesen werden, bei Str(1) könnte es lt. Microsoft Probleme geben.

Sollte die Datei aber zu groß zum vernünftigen einlesen sein , kann man das Prinzip mit Hilfe eines Offsets lösen, indem man zuerst die Anfangsposition (=Offset) berechnet, die Datei öffnet und byteweise bsi zum Offset liest.Das verschiebt den internen Zeiger auf die gewünschte Position , danach kann man wieder ein Byte-array einlesen.
Analog gehts mit dem Schreiben.

Keine Angst, es wird nichts "verschoben",das wäre (physikalisch) ziemlich aufwendig, es wird überschrieben.

MfG
Rainer

bei Antwort benachrichtigen
(Anonym) Nachtrag zu: „Hallo liest sich ganz gut. Ich würde allerdings die Datei wenn sie nicht sehr...“
Optionen

Hallo Rainer,

danke erstmal für die Tips.
Ich möchte den ID3-Tag einer mp3-Datei, also die letzten 128 Bytes der Datei verändern.
Wenn ich doch jetzt die Datei als Byte-Array einlese (wahrscheinlich als Datei zu groß), dann hab ich doch "nur Zahlen" eingelesen. Ich kann dann zB den Interpreten doch nicht im Array finden oder geht
das mit Chr(aktuellesByte) --> Buchstabe?

Ich überschreibe also Bytes mit "Put ...". Wie krieg ich die Datei denn jetzt kleiner? Gibt es da so was wie "EndOfFile", das man setzen könnte?

Gruß Michael

PS: Setzt man den Offset mit "Seek ..."?

bei Antwort benachrichtigen