Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

13.1 Allgemeines zu Dateien und Verzeichnissen

13.1 Allgemeines zu Dateien und Verzeichnissen

Ihnen dürfte klar sein, was eine Datei ist, aber wussten Sie schon, dass Verzeichnisse auch Dateien sind? In einer "Verzeichnis-Datei" befinden sich Informationen der Dateien, welche im Verzeichnis enthalten sind.

Dateien lassen sich in zwei Typen unterscheiden. Es gibt Textdateien, welche mit jedem Texteditor geöffnet werden können und es gibt Binärdateien, welche nur von zugehörigen Anwendungen geöffnet werden können. Sicher kann man diese auch mit einem Texteditor öffnen, aber man wird nur komische Symbole in ihr finden. Deshalb werde ich auf diese zwei Arten in getrennten Kapiteln eingehen.

Um auf Dateien zugreifen zu können, benötigt man die Hilfe des Betriebssystems, weil dieses weiß, wie man mit den verschiedenen Dateisystemen umgeht (FAT, NTFS, ISO9660, UDF und und und). Dies wird unter Windows über die Windows API geregelt, aber keine Angst, denn Visual Studio besitzt bereits fertige Mechanismen, um Ihnen den Umgang zu erleichtern. Dir sollten aber trotzdem wissen, dass man nicht selbst mit den Dateien arbeitet, sondern das Windows dies tut.

Zum Seitenanfang
Zum Inhaltsverzeichnis

13.1.1 Handles

13.1.1 Handles

Bevor Sie mit Dateien arbeiten, sollten Sie grob wissen, was ein Handle ist. Wie bereits erwähnt, regelt das Betriebssystem den Dateizugriff. Dem Programmierer wird beim öffnen eine Art Referenz zur Verfügung gestellt, welche dann immer mit angegeben werden muss, wenn etwas mit der Datei gemacht werden soll. Somit weiß Windows, welche Datei gemeint ist. In C wurde um diese Handles ein Mechanismus herum gebastelt, aber prinzipiell wissen Sie jetzt, dass ein Handle eine Referenz ist, mit welcher das Betriebssystem später eine Zuordnung machen kann.

Handels werden aber nicht nur für Dateien verwendet, sondern kommen überall dort zum Einsatz, wo das Betriebssystem für einen etwas machen soll. Dies betrifft z.B. die Steuerung anderer Programme, Prozesse, Bibliotheken und Fenster. Möchte man z.B. eine Funktion einer DLL benutzen, benötigt man zunächst ein Handle darauf. Will man ein Fenster in den Vordergrund holen oder ein anderes Programm steuern, wird ebenfalls ein Handle benötigt. Dies soll Sie aber jetzt nicht verwirren, sondern nur den Begriff Handle näher bringen.

Da ein Handle wie gesagt nur eine Referenz ist, handelt es sich nur um eine Zahl, welche meistens vom Typ Integer ist.

Zugriff auf eine Datei mittels Handles

Zum Seitenanfang
Zum Inhaltsverzeichnis

13.1.2 Die Tücken der Dateiarbeit

13.1.2 Die Tücken der Dateiarbeit

Der Umgang mit Dateien ist prinzipiell nicht sonderlich schwer, aber es gibt eine Menge Sachen zu beachten, auf die ich hier kurz eingehen werde.

Die erste Schwierigkeit ist dadurch begründet, dass wir heute in der Regel mit Mehrbenutzersystemen arbeiten. D.h. es kann vorkommen, dass wir auf Dateien keinen Zugriff bekommen, da sie von anderen Benutzern oder Prozessen verwendet werden. Deshalb sollten Sie vor Dateizugriffen prüfen, ob Sie auf die gewüschte Datei zugreifen kann.

Ein weiteres Problem ist, dass Sie evtl. gar nicht das Recht haben, auf eine gewisse Datei zugreifen zu können, weil sie einem anderen Benutzer gehören, welcher Ihnen das Leserecht entzogen hat. Auch hierfür gibt es prinzipiell Möglichkeiten, wie man so etwas herausfinden kann, aber da dies sehr stark vom Betriebssystem abhängt, werde ich in diesem Tutorial nicht explizit darauf eingehen. Wichtig ist nur, dass so etwas vorkommen kann, und dass ein berufstätiger Programmierer, auf solche Dinge achten muss.

Ein weiterer ungünstiger Umstand, ist der Anwender. Zum einen könnte eine eingegebene Pfadangabe nicht existieren und zum anderen könnte eine Datei, z.B. auf einem USB-Stick liegen, welche während der Dateiarbeit abgezogen wird. Auch hier sollten Vorkehrungen getroffen werden, dass das Programm nicht abstürzt bzw. sich aufhängt.

Was können Sie also tun? Nun, es gibt zwei gängige Herangehensweisen, welche in enger Kombination verwendet werden sollten. Zum einen kann man ganz paranoid haufenweise Funktionen bauen, die die verschiedensten Sachen im Vorfeld prüfen und zum anderen, sollte man um Dateizugriffe "try catch Statements" bauen. Das könnte dann folgendermaßen aussehen.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
					
// Wenn es die Datei gibt
if (FileExist(astrPath) && IsReadable(astrPath)) {
	try {
		// Dateizugriffe
	} catch (...) { // Wenn irgend ein Fehler/Ausnahme auftritt
		// Dieser Bereich wird ausgeführt, wenn es im Oberen zu
		// einem Absturz kommt
		printf("Beim Zugriff der Datei ist ein Fehler aufgetreten!");
	} // end of try
} // end of if
					

Sie können da sehr paranoid sein und im Zweifelsfall sollten Sie das auch, aber aus Gründen der Verständlichkeit, werde ich in folgenden Quelltexten darauf verzichten. Falls Sie im Web auf die Suche nach Codeschnipseln gehrn, dann wundern Sie sich nicht, wenn Sie sehr verschachtelte Konstrukte finden, denn diese wurden gemacht, um den von mir erwähnten Anfälligkeiten entgegen zu treten.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012