Podstawowe operacje plikowe We/Wy w programie Visual C++ 2005 lub Visual C++ .NET

Tłumaczenia artykułów Tłumaczenia artykułów
Numer ID artykułu: 307398 - Zobacz jakich produktów dotyczą zawarte w tym artykule porady.
Wersja tego artykułu dla programu Microsoft Visual C# .NET: 304430.
Wersja tego artykułu dla programu Microsoft Visual Basic .NET: 304427.
W tym artykule występują odwołania do następujących nazw z klas bibliotek programu Microsoft .NET Framework:
  • System.ComponentModel
  • System.Windows.Forms
  • System.Drawing
Rozwiń wszystko | Zwiń wszystko

Na tej stronie

Streszczenie

W tym artykule krok po kroku opisano sposób wykonywania sześciu podstawowych plikowych operacji wejścia/wyjścia (We/Wy) w programie Microsoft Visual C++ 2005 lub Microsoft Visual C++ .NET. Bez wcześniejszej znajomości systemu .NET można zauważyć, że model obiektowy operacji plikowych w systemie .NET jest podobny do modelu FileSystemObject (FSO) cieszącego się popularnością wśród wielu programistów korzystających z programu Visual Studio 6.0. Aby ułatwić przejście od jednego do drugiego, funkcjonalność demonstrowana w niniejszym artykule oparta została na następującym artykule z bazy wiedzy Microsoft Knowledge Base:
186118 How To Use FileSystemObject with Visual Basic
W systemie .NET można nadal korzystać z modelu FileSystemObject. Ponieważ model FileSystemObject jest składnikiem modelu COM (Component Object Model), w systemie .NET wymagany jest dostęp do obiektu za pośrednictwem warstwy Interop. W systemie .NET dla danego składnika generowany jest obiekt wrapper, z którego można skorzystać. W klasach File, FileInfo, Directory, DirectoryInfo i innych z nimi związanych, w systemie .NET Framework oferowana jest funkcjonalność niedostępna w modelu FSO, jednak bez obciążania warstwy Interop.

Wymagania

Na poniższej liście wymieniono zalecany sprzęt, oprogramowanie, infrastrukturę sieci i wymagane dodatki Service Pack:
  • Program Visual C++ 2005 lub Visual C++ .NET

Zademonstrowane plikowe operacje We/Wy

W przykładach zawartych w tym artykule opisano podstawowe plikowe operacje We/Wy. W sekcji „Przykład krok po kroku” opisano sposób utworzenia przykładowego programu demonstrującego sześć następujących plikowych operacji We/Wy:
  • Odczyt pliku tekstowego
  • Zapis pliku tekstowego
  • Informacje o pliku
  • Wyświetlenie listy stacji dysków
  • Wyświetlenie listy folderów
  • Lista plików

Odczyt pliku tekstowego

W poniższym kodzie przykładowym w celu odczytania pliku System.ini wykorzystano klasę StreamReader. Zawartość tego pliku zostaje dodana do formantu ListBox. Blok programu try...catch został w programie użyty do zgłoszenia alertu, gdy plik jest pusty. Istnieje wiele sposobów na określenie, czy osiągnięty został koniec pliku; w tym przykładzie wykorzystano metodę Peek w celu sprawdzania następnego wiersza przed jego odczytaniem.
  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);
	}

}
				
Uwaga: W programie Visual C++ 2005 należy dodać opcję kompilatora dla obsługi aparatu plików wykonywalnych języka wspólnego (/clr:oldSyntax), aby pomyślnie skompilować powyższy kod przykładowy. Aby dodać opcję kompilatora dla obsługi aparatu plików wykonywalnych języka wspólnego, wykonaj następujące kroki:
  1. Kliknij menu Project (Projekt), a następnie kliknij polecenie NazwaProjektu Properties (Właściwości).

    Uwaga: NazwaProjektu jest symbolem zastępczym dla nazwy projektu.
  2. Rozwiń węzeł Configuration Properties (Właściwości konfiguracyjne), a następnie kliknij pozycję General (Ogólne).
  3. W prawym okienku kliknij, aby zaznaczyć opcję Common Language Runtime Support, Old Syntax (/clr:oldSyntax) (Obsługa aparatu plików wykonywalnych języka wspólnego) w ustawieniach projektu Common Language Runtime support (Obsługa aparatu plików wykonywalnych języka wspólnego).
  4. Kliknij przycisk Apply (Zastosuj), a następnie kliknij przycisk OK.
Aby uzyskać więcej informacji dotyczących opcji kompilatora dla obsługi aparatu plików wykonywalnych języka wspólnego, odwiedź następującą witrynę Microsoft Developer Network (MSDN) w sieci Web:
http://msdn2.microsoft.com/en-us/library/k8d11d4s.aspx

Zapis pliku tekstowego

W tym kodzie przykładowym użyto klasy StreamWriter w celu utworzenia i zapisania pliku. W taki sam sposób można otworzyć plik istniejący.
StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");
pwriter->WriteLine(S"Plik utworzony przy użyciu klasy StreamWriter.");
pwriter->Close();
listBox1->Items->Clear();
String *filew = new String(S"Plik został zapisany do C:\\KBTest.txt");
listBox1->Items->Add(filew);
				

Informacje o pliku

W tym kodzie przykładowym użyto klasy FileInfo w celu uzyskania dostępu do właściwości pliku. W tym przykładzie wykorzystano program Notepad.exe. Właściwości zostają wyświetlone w formancie ListBox.
 listBox1->Items->Clear();
 String* testfile = String::Concat(windir, (S"\\notepad.exe")); 
 FileInfo *pFileProps  =new FileInfo(testfile);

 listBox1->Items->Add(String::Concat(S"Nazwa pliku = ", (pFileProps->get_FullName() )) );
 listBox1->Items->Add(String::Concat(S"Godzina utworzenia = ", (pFileProps->get_CreationTime() ).ToString()) );
 listBox1->Items->Add(String::Concat(S"Godzina ostatniego dostępu = "  ,(pFileProps->get_LastAccessTime() ).ToString()) );
 listBox1->Items->Add(String::Concat(S"Godzina ostatniego zapisu = ", (pFileProps->get_LastWriteTime() ).ToString()) );
 listBox1->Items->Add(String::Concat(S"Rozmiar = ", (pFileProps->get_Length() ).ToString()) );
				

Wyświetlenie listy stacji dysków

W tym kodzie przykładowym zastosowano klasy Directory i Drive w celu wyświetlenia listy określonych w systemie dysków logicznych. W tym przykładzie wynik jest wyświetlany w formancie ListBox.
  listBox1->Items->Clear();
  String* drives[] = Directory::GetLogicalDrives();
  int numDrives = drives->get_Length();
  for (int i=0; i<numDrives; i++)
  {
	listBox1->Items->Add(drives[i]);
  } 
				

Lista podfolderów

W tym kodzie przykładowym zastosowano metodę GetDirectories klasy Directory w celu otrzymania listy folderów.
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]);
}
				

Lista plików

W tym kodzie przykładowym zastosowano metodę GetFiles klasy Directory w celu otrzymania listy plików.
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]);
}
				
Wiele problemów może występować wówczas, gdy użytkownik uzyskuje dostęp do plików. Pliki mogą nie istnieć, mogą być używane albo użytkownicy mogą nie mieć uprawnień do plików lub folderów, do których próbują uzyskać dostęp. Ważne, aby te możliwości wziąć pod uwagę podczas pisania kodu programu oraz aby obsłużyć ewentualne wygenerowane wyjątki.

Przykład krok po kroku

  1. Uruchom program Microsoft Visual Studio 2005 lub Microsoft Visual Studio .NET 2003.
  2. W menu File wskaż polecenie New a następnie kliknij pozycję Project.
  3. W obszarze Project Types kliknij pozycję Visual C++ Projects. W sekcji Templates kliknij pozycję Windows Forms Application (.NET).

    Uwaga: W programie Visual Studio 2005 kliknij pozycję Visual C++ w obszarze Project Types (Typy projektów). W obszarze Templates (Szablony) kliknij pozycję Windows Forms Application (Aplikacje formularzy systemu Windows).
  4. Wpisz tekst Q307398 w polu Name oraz tekst C:\ w polu Location, a następnie kliknij przycisk OK.
  5. Otwórz formularz Form1 w widoku projektu, a następnie naciśnij klawisz F4, aby otworzyć okno Properties (Właściwości).
  6. W oknie Properties rozwiń folder Size. W polu Width wpisz wartość 700. W polu Height wpisz wartość 320.
  7. Dodaj formant ListBox i sześć formantów Button do formularza Form1.

    Uwaga: Aby wyświetlić przybornik, kliknij polecenie Toolbox w menu View.
  8. W oknie Properties dokonaj zmiany właściwości Location, Name, Size, TabIndex oraz Text tych formantów w następujący sposób:
    Zwiń tę tabelęRozwiń tę tabelę
    Control IDLocationNameSizeTabIndexText
    button1500, 32button1112, 231Odczyt pliku tekstowego
    button2500, 64button2112, 232Zapis pliku tekstowego
    button3500, 96button3112, 233Informacje o pliku
    button4500, 128button4112, 234Lista stacji dysków
    button5500, 160button5112, 235Lista podfolderów
    button6500, 192button6112, 236Lista plików
    listBox124, 24listBox1450, 2000listBox1
  9. Otwórz plik Form1.h. W sekcji deklaracji klasy Form1 zadeklaruj jedną zmienną prywatną String za pomocą następującego kodu:
    private:
    		String *windir;
  10. W konstruktorze klasy Form1 dodaj następujący kod:
    windir = System::Environment::GetEnvironmentVariable("windir");
  11. W celu przeprowadzenia plikowych operacji wejścia/wyjścia dodaj obszar nazw System.IO.
  12. Naciśnij klawisze SHIFT+F7, aby otworzyć formularz Form1 w widoku projektowania. Kliknij dwukrotnie przycisk Read Text File (Odczytaj plik tekstowy), a następnie wklej następujący kod:
    // Jak odczytać plik tekstowy:
    // Należy użyć struktury try...catch w celu uwzględnienia pliku o rozmiarze 0 bajtów lub pliku nieistniejącego.
    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(FileNotFoundException *ex)
    {
    	listBox1->Items->Add(ex);
    }  
            
    catch (System::Exception *e)
    { 
    	listBox1->Items->Add(e);
    }
  13. W widoku projektu (Design) formularza Form1 kliknij dwukrotnie przycisk Write Text File (Zapisz plik tekstowy), a następnie wklej następujący kod:
    // Ten kod demonstruje sposób tworzenia i zapisywania pliku tekstowego.
    StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");
    pwriter->WriteLine(S"Plik został utworzony przy użyciu klasy StreamWriter.");
    pwriter->Close();
    listBox1->Items->Clear();
    String *filew = new String(S"Plik został zapisany do C:\\KBTest.txt");
    listBox1->Items->Add(filew);
  14. W widoku projektu (Design) formularza Form1 kliknij dwukrotnie przycisk Write Text File (Zapisz plik tekstowy), kliknij dwukrotnie przycisk View File Information (Wyświetl informacje dotyczące pliku), a następnie wklej następujący kod w metodzie:
    // Ten kod pobiera właściwości pliku. W tym przykładzie wykorzystano program Notepad.exe.
    listBox1->Items->Clear();
    String* testfile = String::Concat(windir, (S"\\notepad.exe")); 
    FileInfo *pFileProps  =new FileInfo(testfile);
    
    listBox1->Items->Add(String::Concat(S"Nazwa pliku = ", (pFileProps->get_FullName() )) );
    listBox1->Items->Add(String::Concat(S"Godzina utworzenia = ", (pFileProps->get_CreationTime() ).ToString()) );
    listBox1->Items->Add(String::Concat(S"Godzina ostatniego dostępu = "  ,(pFileProps->get_LastAccessTime() ).ToString()) );
    listBox1->Items->Add(String::Concat(S"Godzina ostatniego zapisu = ", (pFileProps->get_LastWriteTime() ).ToString()) );
    listBox1->Items->Add(String::Concat(S"Rozmiar = ", (pFileProps->get_Length() ).ToString()) );
  15. W widoku projektu (Design) formularza Form1 kliknij dwukrotnie przycisk View File Information (Wyświetl informacje dotyczące pliku), a następnie wklej następujący kod:
    // Ten kod demonstruje sposób uzyskiwania listy stacji dysków.
    listBox1->Items->Clear();
    String* drives[] = Directory::GetLogicalDrives();
    int numDrives = drives->get_Length();
    for (int i=0; i<numDrives; i++)
    {
    	listBox1->Items->Add(drives[i]);
    }
  16. W widoku projektu (Design) formularza Form1 kliknij dwukrotnie przycisk List Subfolders (Wyświetl podfoldery), a następnie wklej następujący kod:
    // Ten kod uzyskuje listę folderów. W tym przykładzie wykorzystano folder Windows.
    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]);                                                    
    }
  17. W widoku projektu (Design) formularza Form1 kliknij dwukrotnie przycisk List Files (Wyświetl pliki), a następnie wklej następujący kod:
    // Ten kod uzyskuje listę plików. W tym przykładzie wykorzystano folder Windows.
    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]);
    }
  18. Aby skompilować, a następnie uruchomić program, naciśnij klawisze CTRL+F5.

Pełny kod przykładowy

//Form1.h
#pragma once


namespace Q307398
{
	using namespace System;
	using namespace System::IO;
	using namespace System::ComponentModel;
	using namespace System::Collections;
	using namespace System::Windows::Forms;
	using namespace System::Data;
	using namespace System::Drawing;

	/// <summary> 
	/// Podsumowanie dla formularza Form1
	///
	/// OSTRZEŻENIE: Jeżeli nazwa tej klasy zostanie zmieniona, konieczna będzie zmiana 
	///          właściwości 'Resource File Name' (Nazwa pliku zasobu) dla narzędzia kompilatora zarządzanego zasobu 
	///          skojarzonego ze wszystkimi plikami .resx, od których jest zależna ta klasa.  W przeciwnym przypadku
	///          projektanci nie będą mogli prawidłowo interagować ze zlokalizowanymi
	///          zasobami skojarzonymi z tym formularzem.
	/// </summary>
	public __gc class Form1 : public System::Windows::Forms::Form
	{
	private:
		String *windir;
	public:
		Form1(void)
		{
			windir = System::Environment::GetEnvironmentVariable("windir");
			InitializeComponent();
		}
  
	protected:
		void Dispose(Boolean disposing)
		{
			if (disposing && components)
			{
				components->Dispose();
			}
			__super::Dispose(disposing);
		}
	private: System::Windows::Forms::Button *  button1;
	private: System::Windows::Forms::Button *  button2;
	private: System::Windows::Forms::Button *  button3;
	private: System::Windows::Forms::Button *  button4;
	private: System::Windows::Forms::Button *  button5;
	private: System::Windows::Forms::Button *  button6;
	private: System::Windows::Forms::ListBox *  listBox1;

	private:
		/// <summary>
		/// Wymagana zmienna projektanta.
		/// </summary>
		System::ComponentModel::Container * components;

		/// <summary>
		/// Wymagana metoda dla obsługi Projektanta — nie wolno modyfikować
		/// zawartości tej metody przy użyciu edytora kodu.
		/// </summary>
		void InitializeComponent(void)
		{
			this->button1 = new System::Windows::Forms::Button();
			this->button2 = new System::Windows::Forms::Button();
			this->button3 = new System::Windows::Forms::Button();
			this->button4 = new System::Windows::Forms::Button();
			this->button5 = new System::Windows::Forms::Button();
			this->button6 = new System::Windows::Forms::Button();
			this->listBox1 = new System::Windows::Forms::ListBox();
			this->SuspendLayout();
			// 
			// button1
			// 
			this->button1->Location = System::Drawing::Point(500, 32);
			this->button1->Name = S"button1";
			this->button1->Size = System::Drawing::Size(112, 23);
			this->button1->TabIndex = 1;
			this->button1->Text = S"Read Text File";
			this->button1->Click += new System::EventHandler(this, button1_Click);
			// 
			// button2
			// 
			this->button2->Location = System::Drawing::Point(500, 64);
			this->button2->Name = S"button2";
			this->button2->Size = System::Drawing::Size(112, 23);
			this->button2->TabIndex = 2;
			this->button2->Text = S"Write Text File";
			this->button2->Click += new System::EventHandler(this, button2_Click);
			// 
			// button3
			// 
			this->button3->Location = System::Drawing::Point(500, 96);
			this->button3->Name = S"button3";
			this->button3->Size = System::Drawing::Size(112, 23);
			this->button3->TabIndex = 3;
			this->button3->Text = S"View File Information";
			this->button3->Click += new System::EventHandler(this, button3_Click);
			// 
			// button4
			// 
			this->button4->Location = System::Drawing::Point(500, 128);
			this->button4->Name = S"button4";
			this->button4->Size = System::Drawing::Size(112, 23);
			this->button4->TabIndex = 4;
			this->button4->Text = S"List Drives";
			this->button4->Click += new System::EventHandler(this, button4_Click);
			// 
			// button5
			// 
			this->button5->Location = System::Drawing::Point(500, 160);
			this->button5->Name = S"button5";
			this->button5->Size = System::Drawing::Size(112, 23);
			this->button5->TabIndex = 5;
			this->button5->Text = S"List Subfolders";
			this->button5->Click += new System::EventHandler(this, button5_Click);
			// 
			// button6
			// 
			this->button6->Location = System::Drawing::Point(500, 188);
			this->button6->Name = S"button6";
			this->button6->Size = System::Drawing::Size(112, 23);
			this->button6->TabIndex = 6;
			this->button6->Text = S"List Files";
			this->button6->Click += new System::EventHandler(this, button6_Click);
			// 
			// listBox1
			// 
			this->listBox1->Location = System::Drawing::Point(24, 24);
			this->listBox1->Name = S"listBox1";
			this->listBox1->Size = System::Drawing::Size(450, 199);
			this->listBox1->TabIndex = 0;
			// 
			// Form1
			// 
			this->AutoScaleBaseSize = System::Drawing::Size(5, 13);
			this->ClientSize = System::Drawing::Size(692, 293);
			this->Controls->Add(this->listBox1);
			this->Controls->Add(this->button6);
			this->Controls->Add(this->button5);
			this->Controls->Add(this->button4);
			this->Controls->Add(this->button3);
			this->Controls->Add(this->button2);
			this->Controls->Add(this->button1);
			this->Name = S"Form1";
			this->Text = S"Form1";
			this->ResumeLayout(false);

		}	
	private: System::Void button1_Click(System::Object *  sender, System::EventArgs *  e)
			 {// Ten kod demonstruje sposób odczytywania pliku tekstowego.
// Należy spróbować użyć struktury try...catch w celu uwzględnienia pliku o rozmiarze 0 bajtów lub pliku nieistniejącego.
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(FileNotFoundException *ex)
				{
					listBox1->Items->Add(ex);
				}	     
				        
				catch (System::Exception *e)
				{ 
					listBox1->Items->Add(e);
				}
			 }

private: System::Void button2_Click(System::Object *  sender, System::EventArgs *  e)
		 {// Ten kod demonstruje sposób tworzenia i zapisywania pliku tekstowego.
StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");
pwriter->WriteLine(S"Plik został utworzony przy użyciu klasy StreamWriter.");
pwriter->Close();
listBox1->Items->Clear();
String *filew = new String(S"Plik został zapisany do C:\\KBTest.txt");
listBox1->Items->Add(filew);
		 }

private: System::Void button3_Click(System::Object *  sender, System::EventArgs *  e)
		 {// Ten kod pobiera właściwości pliku. W tym przykładzie wykorzystano program Notepad.exe.
listBox1->Items->Clear();
String* testfile = String::Concat(windir, (S"\\notepad.exe")); 
FileInfo *pFileProps  =new FileInfo(testfile);

listBox1->Items->Add(String::Concat(S"Nazwa pliku = ", (pFileProps->get_FullName() )) );
listBox1->Items->Add(String::Concat(S"Godzina utworzenia = ", (pFileProps->get_CreationTime() ).ToString()) );
listBox1->Items->Add(String::Concat(S"Godzina ostatniego dostępu = "  ,(pFileProps->get_LastAccessTime() ).ToString()) );
listBox1->Items->Add(String::Concat(S"Godzina ostatniego zapisu = ", (pFileProps->get_LastWriteTime() ).ToString()) );
listBox1->Items->Add(String::Concat(S"Rozmiar = ", (pFileProps->get_Length() ).ToString()) );
		 }

private: System::Void button4_Click(System::Object *  sender, System::EventArgs *  e)
		 {// Ten kod demonstruje sposób uzyskiwania listy stacji dysków.
listBox1->Items->Clear();
String* drives[] = Directory::GetLogicalDrives();
int numDrives = drives->get_Length();
for (int i=0; i<numDrives; i++)
{
	listBox1->Items->Add(drives[i]);
}
		 }

private: System::Void button5_Click(System::Object *  sender, System::EventArgs *  e)
		 {// Ten kod uzyskuje listę folderów. W tym przykładzie wykorzystano folder Windows.
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]);                                                    
}
		 }

private: System::Void button6_Click(System::Object *  sender, System::EventArgs *  e)
		 {// Ten kod uzyskuje listę plików. W tym przykładzie wykorzystano folder Windows.
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]);
}
		 }

};
}

//Form1.cpp
#include "stdafx.h"
#include "Form1.h"
#include <windows.h>

using namespace My;

int APIENTRY _tWinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPTSTR    lpCmdLine,
                     int       nCmdShow)
{
	System::Threading::Thread::CurrentThread->ApartmentState = System::Threading::ApartmentState::STA;
	Application::Run(new Form1());
	return 0;
}

Materiały referencyjne

Aby uzyskać więcej informacji, odwiedź następującą witrynę firmy Microsoft w sieci Web:
http://support.microsoft.com/default.aspx?xmlid=fh%3BPL-PL%3Bvcnet
Aby uzyskać więcej informacji dotyczących programu Visual C++ .NET, odwiedź następującą grupę dyskusyjną Microsoft Usenet:
Microsoft.public.dotnet.languages.vc
Aby uzyskać więcej informacji dotyczących sposobu tworzenia formularzy systemu Windows przy użyciu zarządzanych rozszerzeń języka C++, zobacz przykład „ManagedCWinFormWiz” w Pomocy programu Visual Studio .NET.

Właściwości

Numer ID artykułu: 307398 - Ostatnia weryfikacja: 16 lutego 2006 - Weryfikacja: 3.0
Informacje zawarte w tym artykule dotyczą:
  • Microsoft Visual C++ 2005 Express Edition
  • Microsoft Visual C++ .NET 2003 Standard Edition
Słowa kluczowe: 
kbhowtomaster kbwindowsforms kbio kbnewsgrouplink kbforms kbfileio KB307398

Przekaż opinię

 

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