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.178 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. |
sevISDN 1.0 Überwachung aller eingehender Anrufe! Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Tipp des Monats April 2024 Skyfloy Chart von Microsoft und dazu noch gratis Tutorial für Microsoft Chart Controls für Microsoft .NET Framework 3.5 sevZIP40 Pro DLL Zippen und Unzippen wie die Profis! Mit nur wenigen Zeilen Code statten Sie Ihre Anwendungen ab sofort mit schnellen Zip- und Unzip-Funktionen aus. Hierbei lassen sich entweder einzelnen Dateien oder auch gesamte Ordner zippen bzw. entpacken. |
||||||||||||||||
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. |