Wie lässt sich eine bestimmte Anzahl Bytes an eine bestehende Datei anhängen, so dass die Datei größer wird? Diese Frage lässt sich recht einfach mit VB-Boardmitteln beantworten: Dim F As Integer Dim sText As String Dim sFile As String ' Besagte Datei... sFile = "c:\temp\MyFile.dat" ' Inhalt, der angehängt werden soll sText = Space$(10) ' Einfach nur 10 Bytes... F = FreeFile Open sFile For Binary As #F Seek #F, LOF(F) + 1 Put #F, , sText Close #F Alles noch recht einfach. Aber wie sieht es aus, wenn man eine bestimmte Anzahl Bytes "abschneiden" will? Auf Deutsch: Eine Datei, die regulär 1 MB groß ist soll z.B. um 10 Bytes reduziert werden. Eine Lösung wäre, den Inhalt (blockweise) auszulesen und in eine neue Datei zu schreiben. Danach löscht man die "alte" Datei und benennt die neu erstellte Datei entsprechend um. Es geht aber auch einfacher Option Explicit ' zunächst die benötigten API-Deklarationen Private Declare Function CreateFile Lib "kernel32.dll" _ Alias "CreateFileA" ( _ ByVal lpFileName As String, _ ByVal dwDesiredAccess As Long, _ ByVal dwShareMode As Long, _ lpSecurityAttributes As Any, _ ByVal dwCreationDisposition As Long, _ ByVal dwFlagsAndAttributes As Long, _ ByVal hTemplateFile As Long) As Long Private Declare Function SetFilePointer Lib "kernel32.dll" ( _ ByVal hFile As Long, _ ByVal lDistanceToMove As Long, _ lpDistanceToMoveHigh As Long, _ ByVal dwMoveMethod As Long) As Long Private Declare Function SetEndOfFile Lib "kernel32" ( _ ByVal hFile As Long) As Long Private Declare Function CloseHandle Lib "kernel32.dll" ( _ ByVal hObject As Long) As Long ' Konstanten Private Const GENERIC_WRITE = &H40000000 Private Const FILE_SHARE_READ = &H1 Private Const OPEN_EXISTING = 3 Private Const FILE_FLAG_SEQUENTIAL_SCAN = &H8000000 Private Const FILE_END = 2 Und hier der Code zum "Kürzen" einer Datei... Dim fHandle As Long Dim sFile As String Dim nBytes As Long ' Datei, die "gekürzt" werden soll sFile = "c:\temp\MyFile.dat" ' Anzahl Bytes die am Ende entfernt werden sollen nBytes = 10 ' Datei öffnen und Handle erstellen fHandle = CreateFile(sFile, GENERIC_WRITE, _ FILE_SHARE_READ, ByVal 0&, OPEN_EXISTING, _ FILE_FLAG_SEQUENTIAL_SCAN, 0&) If fHandle <> -1 Then ' Dateizeiger an die gewünschte Position setzen Call SetFilePointer(fHandle, -nBytes, ByVal 0&, FILE_END) ' Aktuelle Position als "END-Position" setzen Call SetEndOfFile(fHandle) ' Datei schließen Call CloseHandle(fHandle) Else ' Fehler: Evtl. existiert die Datei nicht... End If Auf diese Weise lässt sich z.B. der ID3-Tag einer MP3-Datei eben schnell mal entfernen Dieser Tipp wurde bereits 18.153 mal aufgerufen. Voriger Tipp | Zufälliger Tipp | Nächster Tipp
Anzeige
Diesen und auch alle anderen Tipps & Tricks finden Sie auch auf unserer aktuellen vb@rchiv Vol.6 (einschl. Beispielprojekt!) Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv! - nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten - Symbol-Galerie mit mehr als 3.200 Icons im modernen Look Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m. |
Neu! sevCoolbar 3.0 Professionelle Toolbars im modernen Design! Mit sevCoolbar erstellen Sie in wenigen Minuten ansprechende und moderne Toolbars und passen diese optimal an das Layout Ihrer Anwendung an (inkl. große Symbolbibliothek) - für VB und MS-Access Tipp des Monats März 2024 Dieter Otter UTF-8 Konvertierung von Dateien und Strings VB6 selbst verfügt über keine Funktionen zur UTF-8 Konvertierung von Daten. Mit Hilfe des ADODB.Stream-Objekts lassen sich diese fehlenden Funktionen aber schnell nachrüsten. TOP Entwickler-Paket TOP-Preis!! Mit der Developer CD erhalten Sie insgesamt 24 Entwickler- komponenten und Windows-DLLs. Die Einzelkomponenten haben einen Gesamtwert von 1605.50 EUR... |
||||||||||||||||
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein. |