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

SPRACHE AUSWÄHLEN SPRACHE AUSWÄHLEN
Artikel-ID: 307398 - Produkte anzeigen, auf die sich dieser Artikel bezieht
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.
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.
Alles erweitern | Alles schließen

Auf dieser Seite

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:

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);
	}

}

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);

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()) );

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]);
  } 

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]);
}

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.

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 WinForms
    using 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 WinForm
    
    public:
    	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.

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:
Microsoft.public.dotnet.languages.vc

microsoft.public.de.german.entwickler.dotnet.vc

Eigenschaften

Artikel-ID: 307398 - Geändert am: Mittwoch, 29. Oktober 2003 - Version: 1.0
Die Informationen in diesem Artikel beziehen sich auf:
  • Microsoft Visual C++ .NET 2003 Standard Edition
Keywords: 
kbhowtomaster KB307398
Microsoft stellt Ihnen die in der Knowledge Base angebotenen Artikel und Informationen als Service-Leistung zur Verfügung. Microsoft übernimmt keinerlei Gewährleistung dafür, dass die angebotenen Artikel und Informationen auch in Ihrer Einsatzumgebung die erwünschten Ergebnisse erzielen. Die Entscheidung darüber, ob und in welcher Form Sie die angebotenen Artikel und Informationen nutzen, liegt daher allein bei Ihnen. Mit Ausnahme der gesetzlichen Haftung für Vorsatz ist jede Haftung von Microsoft im Zusammenhang mit Ihrer Nutzung dieser Artikel oder Informationen ausgeschlossen.

Ihr Feedback an uns

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com