ABOUT Visual Basic Programmieren Programmierung Download Downloads Tips & Tricks Tipps & Tricks Know-How Praxis VB VBA Visual Basic for Applications VBS VBScript Scripting Windows ActiveX COM OLE API ComputerPC Microsoft Office Microsoft Office 97 Office 2000 Access Word Winword Excel Outlook Addins ASP Active Server Pages COMAddIns ActiveX-Controls OCX UserControl UserDocument Komponenten DLL EXE
Diese Seite wurde zuletzt aktualisiert am 15.10.2001

Diese Seite wurde zuletzt aktualisiert am 15.10.2001
Aktuell im ABOUT Visual Basic-MagazinGrundlagenwissen und TechnologienKnow How, Tipps und Tricks rund um Visual BasicActiveX-Komponenten, Controls, Klassen und mehr...AddIns für die Visual Basic-IDE und die VBA-IDEVBA-Programmierung in MS-Office und anderen AnwendungenScripting-Praxis für den Windows Scripting Host und das Scripting-ControlTools, Komponenten und Dienstleistungen des MarktesRessourcen für Programmierer (Bücher, Job-Börse)Dies&Das...

Themen und Stichwörter im ABOUT Visual Basic-Magazin
Code, Beispiele, Komponenten, Tools im Überblick, Shareware, Freeware
Ihre Service-Seite, Termine, Job-Börse
Melden Sie sich an, um in den vollen Genuss des ABOUT Visual Basic-Magazins zu kommen!
Informationen zum ABOUT Visual Basic-Magazin, Kontakt und Impressum

Zurück...

Unsichtbare Ströme

Zurück...


Anzeige

(-hg) mailto:hg_filestreams@aboutvb.de

Möchten Sie in einer Datei zusätzliche Informationen ablegen können, ohne den eigentlichen Inhalt der Datei anzutasten? Seit Windows 2000 bzw. seit dem mit dieser Windows-Version eingeführten Dateisystem NTFS 5 besteht diese Möglichkeit, die Sie im wesentlichen auch ohne Probleme von Visual Basic aus nutzen können. Die Rede ist von so genannten "Streams".

Vor dem Dateisystem NTFS 5 war der Begriff "Streams" aus der Sicht des Dateisystems irrelevant. Es gab nur einen einzigen "Stream" je Datei - den Haupt-Stream, in dem alle Daten landen, die auf gewohnte Weise in eine Datei geschrieben werden. Seit NTFS 5 können Sie jedoch zusätzliche Datenbereiche einer Datei adressieren, eben zusätzliche Streams, in denen Sie unabhängig vom gewohnten Haupt-Stream Daten ablegen und aus denen Sie sie wieder einlesen können. Einen solchen Stream sprechen Sie über den Dateinamen an, der um einen eigenen Namen ergänzt wird, abgetrennt durch einen Doppelpunkt - beispielsweise:

test.txt:ExtraDaten

Für die Datei-FunktionOpen zum Öffnen einer Datei in Visual Basic ist diese Schreibweise völlig transparent. Das bedeutet, dass Sie statt eines reinen Dateinamens wie bisher auch einen solchen um eine Stream-Angabe erweiterten Dateinamen übergeben können. Statt des Haupt-Streams der Datei wird dann entsprechend der benannte Stream angelegt, geöffnet, beschrieben und gelesen. Existiert die Datei selbst noch nicht, wird sie gegebenenfalls zugleich angelegt. Beim Verschieben oder Kopieren der Datei wandern die Inhalte der zusätzlichen Streams mit - sie sind fest mit dem Dateinamen verbunden.

Probieren Sie es einfach einmal aus und schreiben Sie beliebige Daten in eine Datei - zum Beispiel:

Dim nFNr As Integer
Dim nText As String

nText = "Hallo " & Now
Open "c:\test.txt:ExtraDaten" For Binary As #nFNr
  Put #nFNr, , nText
Close #nFNr

Bis auf den Zusatz zum Dateinamen sieht das absolut wie gewohnt aus, nicht wahr? Auch das Auslesen der Daten erfolgt wie gewohnt:

Dim nFNr As Integer
Dim nText As String

Open "c:\test.txt:ExtraDaten" For Binary As #nFNr
  nText = Space$(LOF(nFNr))
  Get #nFNr, , nText
Close #nFNr
Debug.Print nText

Das funktioniert auch genau so mit den übrigen Modi zum Schreiben und Lesen von Dateien, Output, Append und Input, und natürlich auch für Random-Dateien. Was Sie in einem zusätzlichen Streams (sie können beliebig viele anlegen) ablegen, bleibt Ihnen überlassen.

Zum Löschen eines zusätzlichen Streams müssen Sie die API-Funktion DeleteFile verwenden - der Einfachheit halber als "KillStream" deklariert:

Private Declare Function KillStream Lib "kernel32" _
 Alias "DeleteFileA" (ByVal lpFileName As String) As Long

Dieser Funktion übergeben Sie wie zum Öffnen den vollständigen Stream-Namen (Dateiname plus Stream-Name) - beispielsweise:

KillStream "c:\test.txt:ExtraDaten"

Umbenennen können Sie einen Stream nicht. Sie können nur seinen Inhalt auslesen, unter einem neuen Stream-Namen wieder ablegen. Anschließend löschen Sie den alten Stream.

Ein paar winzig kleine Haken haben diese zusätzlichen Streams allerdings. Die Angabe der Größe einer Datei bleibt von den Inhalten der zusätzlichen Streams unberührt. Eine scheinbare leere Datei mit einer Länge von 0 Bytes kann also in Wahrheit sogar sehr umfangreiche Daten enthalten - in ihren zusätzlichen Streams. Ebensowenig wirkt sich der Stream-Inhalt auf das verfügbare Kontingent eines Datenträgers aus. Ein weiterer Haken ist, dass der Erhalt der zusätzlichen Streams auf NTFS 5-Datenträger beschränkt ist. Beim Kopieren oder Verschieben auf Datenträger mit anderen Dateisystemen, etwa FAT16 oder FAT32, Floppy-Disks, CD-ROMS u.a. gehen die zusätzlichen Streams leider verloren. Es erfolgt jedoch immerhin eine Warnung vor dem Kopieren oder Verschieben auf einen solchen Datenträger.

Der letzte Haken ist eher nur vorläufig ein solcher. Im Moment kann ich Ihnen noch keine Möglichkeit bieten, aus einer Datei eine Übersicht auszulesen, welche Streams sie enthält. Das wird einem weiteren Artikel vorbehalten bleiben. Sie können sich allerdings damit behelfen, in einem separaten Stream selbst ein Inhaltsverzeichnis zu verwalten.


Artikel
Mail an den Autor dieses Artikels

KnowHow
Zur KnowHow-Übersicht

KnowHow-Themen
Themen - Allgemeines
Themen - Entwicklungsumgebung (VB-IDE)
Themen - Forms
Themen - Steuerelemente (Controls)
Themen - Grafik
Themen - Dateien
Themen - UserControls
Themen - Einsteiger-Tipps
Themen - Wussten Sie...?

Übersicht nach Titeln in alphabetischer Reihenfolge
Übersicht nach Erscheinungsdatum

Schnellsuche




Zum Seitenanfang

Copyright © 1999 - 2017 Harald M. Genauck, ip-pro gmbh  /  Impressum

Zum Seitenanfang

Zurück...

Zurück...

Download Internet Explorer