Sie sind zurzeit offline. Es wird auf die erneute Herstellung einer Internetverbindung gewartet.

SO WIRD'S GEMACHT: Mithilfe von Visual C++ .NET allgemeine Datei-I/O-Vorgänge durchführen

Dieser Artikel wurde zuvor veröffentlicht unter D307398
Dieser Artikel ist eine Übersetzung des folgenden englischsprachigen Artikels der Microsoft Knowledge Base:
307398 HOW TO: Do Basic File I/O in Visual C++ .NET
In Artikel 304430 wird dieses Thema für Microsoft Visual C# .NET beschrieben.
In Artikel 304427 wird dieses Thema für Microsoft Visual Basic .NET beschrieben.
Zusammenfassung
Dieser Artikel erläutert Schritt für Schritt, wie Sie sechs allgemeine Datei-Eingabe/Ausgabe (I/O)-Vorgänge in Visual C++ .NET ausführen können. Wenn Sie noch nicht mit .NET vertraut sind, werden Sie feststellen, dass das Objektmodell für Dateivorgänge in .NET dem FileSystemObject (FSO) sehr ähnelt, das bei Visual Studio 6.0-Entwicklern verbreitet ist. Um den Übergang zu Visual C++ .NET zu vereinfachen, wurde als Grundlage für die in diesem Artikel beschriebene Funktionalität der folgende Microsoft Knowledge Base-Artikel verwendet:
186118 HOWTO: Use FileSystemObject with Visual Basic
Sie können in .NET weiterhin FileSystemObject verwenden. Da das FileSystemObject eine COM-Komponente (Component Object Model, COM) ist, muss in .NET der Zugriff über die Interop-Schicht erfolgen. .NET erstellt einen Wrapper für die Komponente, wenn Sie sie zur Verwendung auswählen. Die Klassen File, FileInfo, Directory und DirectoryInfo sowie andere diesbezügliche Klassen im .NET-Framework bieten jedoch eine Funktionalität, die beim FSO-Objektmodell ohne den Verwaltungsaufwand der Interop-Schicht nicht verfügbar ist.

Die Beispiele in diesem Artikel beschreiben allgemeine Datei-I/O-Vorgänge. Im Abschnitt "Beispiel mit schrittweiser Anleitung" wird beschrieben, wie Sie eine Beispielanwendung erstellen können, die diese Vorgänge demonstriert:

Zurück zum Anfang

Eine Textdatei lesen

In diesem Codebeispiel wird die Klasse StreamReader zum Lesen der Datei System.ini verwendet. Der Inhalt der Datei wird zu einem ListBox-Steuerelement hinzugefügt. Der Block try...catch wird zum Warnen des Programms verwendet, wenn die Datei leer ist. Es gibt eine Vielzahl von Möglichkeiten, mit denen festgestellt werden kann, wann das Ende der Datei erreicht ist. In diesem Beispiel wird die Methode Peek zum Überprüfen der jeweils nächsten Zeile verwendet, bevor diese gelesen wird.
  listbox1->Items->Clear();   	try   	{    		String* textFile = String::Concat(windir,                                    (S"\\mytest.txt")); 	        StreamReader *reader=new  StreamReader(textFile);		do		{		    listbox1->Items->Add(reader->ReadLine());		}   		while(reader->Peek() != -1);	}               	catch (System::Exception *e)	{ 		listbox1->Items->Add(e);	}}
Zurück zum Anfang

Eine Textdatei schreiben

Im folgenden Codebeispiel wird die Klasse StreamWriter verwendet, um eine Datei zu erstellen und in eine Datei zu schreiben. Wenn Sie über eine vorhandene Datei verfügen, können Sie sie auf die gleiche Weise öffnen.
StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");pwriter->WriteLine(S"File created using StreamWriter class.");pwriter->Close();listbox1->Items->Clear();String *filew = new String(S"File Written to C:\\KBTest.txt");listbox1->Items->Add(filew);
Zurück zum Anfang

Dateiinformationen anzeigen

In diesem Codebeispiel wird die Klasse FileInfo verwendet, um auf die Eigenschaften einer Datei zuzugreifen. In diesem Beispiel wird Notepad.exe verwendet. Die Eigenschaften werden in einem ListBox-Steuerelement angezeigt.
 listbox1->Items->Clear(); String* testfile = String::Concat(windir, (S"\\notepad.exe"));  FileInfo *pFileProps  =new FileInfo(testfile); listbox1->Items->Add(String::Concat(S"File Name = ", (pFileProps->get_FullName() )) ); listbox1->Items->Add(String::Concat(S"Creation Time = ", (pFileProps->get_CreationTime() ).ToString()) ); listbox1->Items->Add(String::Concat(S"Last Access Time = "  ,(pFileProps->get_LastAccessTime() ).ToString()) ); listbox1->Items->Add(String::Concat(S"Last Write Time = ", (pFileProps->get_LastWriteTime() ).ToString()) ); listbox1->Items->Add(String::Concat(S"Size = ", (pFileProps->get_Length() ).ToString()) );
Zurück zum Anfang

Laufwerke auflisten

Im folgenden Codebeispiel werden die Klassen Directory und Drive verwendet, um die logischen Laufwerke auf einem System aufzulisten. In diesem Beispiel werden die Ergebnisse in einem ListBox-Steuerelement angezeigt.
  listbox1->Items->Clear();  String* drives[] = Directory::GetLogicalDrives();  int numDrives = drives->get_Length();  for (int i=0; i<numDrives; i++)  {	listbox1->Items->Add(drives[i]);  } 
Zurück zum Anfang

Unterordner auflisten

Im folgenden Codebeispiel wird die Methode GetDirectories der Klasse Directory verwendet, um die Ordnerliste abzurufen.
listbox1->Items->Clear();String* dirs[] = Directory::GetDirectories(windir);int numDirs = dirs->get_Length();for (int i=0; i<numDirs; i++){listbox1->Items->Add(dirs[i]);}
Zurück zum Anfang

Dateien auflisten

Im folgenden Codebeispiel wird die Methode GetFiles der Klasse Directory verwendet, um die Liste der Dateien abzurufen.
 listbox1->Items->Clear(); String* files[]= Directory::GetFiles(this->windir); int numFiles = files->get_Length(); for (int i=0; i<numFiles; i++) {   listbox1->Items->Add(files[i]); }
Wenn ein Benutzer auf Dateien zugreift, können viele Vorgänge fehlschlagen. Die Dateien existieren möglicherweise nicht, die Dateien werden eventuell gerade verwendet oder die Benutzer besitzen keine Berechtigungen für die Dateien in Ordnern, auf die Sie zugreifen möchten. Es ist wichtig, diese Möglichkeiten beim Schreiben des Codes in Betracht zu ziehen und die möglicherweise auftretenden Ausnahmen zu berücksichtigen.

Zurück zum Anfang

Beispiel mit schrittweiser Anleitung

  1. Erstellen Sie in Visual C++ .NET eine neue verwaltete C++-Anwendung.
  2. Öffnen Sie das Codefenster für <project name> .cpp.
  3. Löschen Sie den gesamten Code.
  4. Fügen Sie folgenden Code in <project name>.cpp ein:
    #using <mscorlib.dll>using namespace System;using namespace System::IO;// required dlls for WinForms#using "System.dll"#using "System.Windows.Forms.dll"#using "System.Drawing.dll"// required namespaces for WinFormsusing namespace System::ComponentModel;using namespace System::Windows::Forms;using namespace System::Drawing;__gc class WinForm: public Form {private:			Button	    *button1;	Button	    *button2;	Button	    *button3;	Button	    *button4;	Button	    *button5;	Button	    *button6;	String*     windir;	ListBox     *listbox1;	String	    *caption;	// Caption of the WinForm	int	    width;		// width of the WinForm	int	    height;		// height of the WinFormpublic:	WinForm() 	{		// Set caption and size of the WinForm		caption = "Form1";		width = 360;		height = 273;		windir=System::Environment::GetEnvironmentVariable("windir");		InitForm();	}	void Dispose()	{	// Form is being destroyed.  Do any necessary clean-up here.		Form::Dispose();	}void InitForm(){		// Setup controls here		// Basic WinForm Settings			SuspendLayout();		// button1		//                 button1 = new Button();		button1->Text = "button1";		button1->Name = "button1";		button1->Size = Drawing::Size(112, 23);		button1->TabIndex = 1;		button1->Location = Drawing::Point(216,32);		button1->Click += (new EventHandler(this,                                       &WinForm::button1_Click));		Controls->Add(button1);		// button2		// 		button2 = new Button();		button2->Text = "button2";		button2->Name = "button2";		button2->Size = Drawing::Size(112, 23);		button2->TabIndex = 2;		button2->Location = Drawing::Point(216,64);		button2->Click += (new EventHandler(this,                                   &WinForm::button2_Click));		Controls->Add(button2);				// button3		// 		button3 = new Button();		button3->Text = "button3";		button3->Name = "button3";		button3->Size = Drawing::Size(112, 23);		button3->TabIndex = 3;		button3->Location = Drawing::Point(216,96);		button3->Click += (new EventHandler(this,                                   &WinForm::button3_Click));		Controls->Add(button3);		// listbox1		// 		listbox1 = new ListBox();		listbox1->Text = "Listbox1";		listbox1->Name = "Listbox1";		listbox1->Size = Drawing::Size(176, 199);		listbox1->TabIndex = 0;		listbox1->Location = Drawing::Point(24,24);		Controls->Add(listbox1);					// 		// button4		// 		button4 = new Button();		button4->Text = "button4";		button4->Name = "button4";		button4->Size = Drawing::Size(112, 23);		button4->TabIndex = 4;		button4->Location = Drawing::Point(216,128);		button4->Click += (new EventHandler(this,                                    &WinForm::button4_Click));		Controls->Add(button4);		// button5		// 		button5 = new Button();		button5->Text = "button5";		button5->Name = "button5";		button5->Size = Drawing::Size(112, 23);		button5->TabIndex = 5;		button5->Location = Drawing::Point(216,160);		button5->Click += (new EventHandler(this,                                   &WinForm::button5_Click));		Controls->Add(button5);		// button6		// 		button6 = new Button();		button6->Text = "button6";		button6->Name = "button6";		button6->Size = Drawing::Size(112, 23);		button6->TabIndex = 6;		button6->Location = Drawing::Point(216,192);		button6->Click += (new EventHandler(this,                                   &WinForm::button6_Click));		Controls->Add(button6);		Text = caption;		Size = System::Drawing::Size(width, height);			Name = "Form1";		Text = "Form1";		Load += new System::EventHandler(this, Form1_Load);		ResumeLayout(false);}void button6_Click(Object *sender, EventArgs *e){//how to obtain list of files (example uses Windows folder)	listbox1->Items->Clear();	String* files[]= Directory::GetFiles(this->windir);	int numFiles = files->get_Length();	for (int i=0; i<numFiles; i++)	{	 listbox1->Items->Add(files[i]);	}}void button1_Click(Object *sender, EventArgs *e){//how to read a text file//try...catch is to deal with a 0 byte file or non-existant file	listbox1->Items->Clear();   	try   	{    	    String* textFile = String::Concat(windir,                                             ("\\mytest.txt")); 	    StreamReader *reader=new  StreamReader(textFile);	    do	    {		listbox1->Items->Add(reader->ReadLine());	    }   	    while(reader->Peek() != -1);	}               	catch (System::Exception *e)	{ 	    listbox1->Items->Add(e);	}} void Form1_Load(Object *sender, EventArgs *e){	button1->Text = "Read Text File";	button2->Text = "Write Text File";	button3->Text = "View File Information";	button4->Text = "List Drives";	button5->Text = "List Subfolders";	button6->Text = "List Files";}void button5_Click(Object *sender, EventArgs *e){         //how to get a list of folders (example uses Windows folder) 	listbox1->Items->Clear();	String* dirs[] = Directory::GetDirectories(windir);	int numDirs = dirs->get_Length();	for (int i=0; i<numDirs; i++)	{		listbox1->Items->Add(dirs[i]);                                                      	}}void button4_Click(Object *sender, EventArgs *e){//demonstrates  how to obtain a list of disk drives	listbox1->Items->Clear();	String* drives[] = Directory::GetLogicalDrives();	int numDrives = drives->get_Length();	for (int i=0; i<numDrives; i++)	{		listbox1->Items->Add(drives[i]);	}}void button3_Click(Object *sender, EventArgs *e){   //how to retrieve file properties (example uses notepad.exe) listbox1->Items->Clear(); String* testfile = String::Concat(windir, (S"\\notepad.exe"));  FileInfo *pFileProps  =new FileInfo(testfile); listbox1->Items->Add(String::Concat(S"File Name = ", (pFileProps->get_FullName() )) ); listbox1->Items->Add(String::Concat(S"Creation Time = ", (pFileProps->get_CreationTime() ).ToString()) ); listbox1->Items->Add(String::Concat(S"Last Access Time = "  ,(pFileProps->get_LastAccessTime() ).ToString()) ); listbox1->Items->Add(String::Concat(S"Last Write Time = ", (pFileProps->get_LastWriteTime() ).ToString()) ); listbox1->Items->Add(String::Concat(S"Size = ", (pFileProps->get_Length() ).ToString()) );}      void button2_Click(Object *sender, EventArgs *e){//demonstrates how to create and write to a text file  StreamWriter* pwriter = new StreamWriter("c:\\KBTest.txt");  pwriter->WriteLine("File created using StreamWriter class.");  pwriter->Close();  listbox1->Items->Clear();  String *filew = new String(S"File Written to C:\\KBTest.txt");  listbox1->Items->Add(filew);}};void main(){	// This line creates an instance of WinForm, and 	// uses it as the Main Window of the application. 	Application::Run(new WinForm());}
  5. Klicken Sie im Projektmappen-Explorer mit der rechten Maustaste auf den Projektnamen. Klicken Sie danach auf Eigenschaften. Wählen Sie C/C++, und klicken Sie danach auf Vorkompilierte Header. Ändern Sie die Einstellung von Erstellen/Verwenden eines vorkompilierten Headers in Vorkompilierte Header nicht verwenden um, und speichern Sie anschließend das Projekt.
  6. Drücken Sie die Taste [F5], um die Anwendung zu erstellen und auszuführen. Klicken Sie auf die Schaltflächen, um die verschiedenen Aktionen anzuzeigen.
Zurück zum Anfang
Verweise
Weitere Informationen dazu, wie Sie Windows-Formulare in verwalteten Erweiterungen für Visual C++ erstellen, finden Sie in dem Beispiel "ManagedCWinFormWiz" in der Onlinehilfe von Visual Studio .NET.

Weitere allgemeine Informationen zu Visual C++ .NET finden Sie in folgenden Usenet-Newsgroups:Zurück zum Anfang
Eingabe Ausgabe Textdatei Laufwerke Unterordner lesen schreiben anzeigen auflisten
Bitte beachten Sie: Bei diesem Artikel handelt es sich um eine Übersetzung aus dem Englischen. Es ist möglich, dass nachträgliche Änderungen bzw. Ergänzungen im englischen Originalartikel in dieser Übersetzung nicht berücksichtigt sind. Die in diesem Artikel enthaltenen Informationen basieren auf der/den englischsprachigen Produktversion(en). Die Richtigkeit dieser Informationen in Zusammenhang mit anderssprachigen Produktversionen wurde im Rahmen dieser Übersetzung nicht getestet. Microsoft stellt diese Informationen ohne Gewähr für Richtigkeit bzw. Funktionalität zur Verfügung und übernimmt auch keine Gewährleistung bezüglich der Vollständigkeit oder Richtigkeit der Übersetzung.
Eigenschaften

Artikelnummer: 307398 – Letzte Überarbeitung: 10/29/2003 10:51:00 – Revision: 1.0

Microsoft Visual C++ .NET 2003 Standard Edition

  • kbhowtomaster KB307398
Feedback
/html>script>