현재 오프라인 상태입니다. 인터넷에 다시 연결하기를 기다리고 있습니다.

HOWTO: Visual C++ .NET에서 기본 파일 입/출력 수행

이 문서는 이전에 다음 ID로 출판되었음: KR307398
요약
본 문서에서는 Visual C++ .NET을 사용하여 여섯 가지의 기본 파일 입/출력(I/O) 작업을 수행하는 방법을 단계별로 설명합니다. .NET을 처음 사용하더라도 .NET 파일 작업에 사용되는 개체 모델이 Visual Studio 6.0 개발자에게 친숙한 FileSystemObject(FSO)와 매우 비슷하다는 걸 알 수 있습니다. 사용자의 이해를 돕기 위해, 본 문서에 설명된 기능은 Microsoft 기술 자료의 다음 문서를 토대로 합니다.
186118 HOWTO: Use FileSystemObject with Visual Basic
.NET에서도 FileSystemObject를 계속 사용할 수 있습니다. FileSystemObject가 구성 요소 개체 모델(COM) 구성 요소이기 때문에 .NET에서는 Interop 계층을 통해 이 개체에 액세스해야 합니다. 사용자가 이 구성 요소를 사용하려고 하면 .NET이 이 구성 요소에 대한 래퍼를 생성합니다. 하지만 .NET Framework의 다른 관련 클래스뿐 아니라 File, FileInfo, DirectoryDirectoryInfo 클래스는 Interop 계층의 오버헤드 없이 FSO에 없는 기능을 제공합니다.

본 문서의 예제에서는 기본 파일 입/출력 작업을 설명합니다. "단계별 예제" 절에서는 파일 입/출력 작업을 실행하도록 예제 응용 프로그램을 만드는 방법을 설명합니다.

맨 위로

텍스트 파일 읽기

이 코드 예제에서는 StreamReader 클래스를 사용하여 System.ini 파일을 읽습니다. 파일 내용은 ListBox 컨트롤에 추가됩니다. try...catch 블록은 파일이 비어 있을 경우 프로그램에 경고 메시지를 나타내는 데 사용됩니다. 파일 끝에 도달하는 시기를 확인하는 방법에는 여러 가지가 있지만, 이 예제에서는 Peek 메서드를 사용하여 읽기 전에 다음 줄을 검사합니다.
  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);	}}
맨 위로

텍스트 파일 쓰기

이 코드 예제에서는 StreamWriter 클래스를 사용하여 파일을 만들고 파일에 씁니다. 기존의 파일도 같은 방법으로 열 수 있습니다.
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);
맨 위로

파일 정보 보기

이 코드 예제에서는 FileInfo 클래스를 사용하여 파일 속성에 액세스합니다. 이 예제에서는 Notepad.exe가 사용됩니다. 속성은 ListBox 컨트롤에 표시됩니다.
 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()) );
맨 위로

디스크 드라이브 나열

이 코드 예제에서는 DirectoryDrive 클래스를 사용하여 시스템 상의 논리 드라이브를 나열합니다. 이 예제에서 결과는 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]);  } 
맨 위로

폴더 나열

이 코드 예제에서는 Directory 클래스의 GetDirectories 메서드를 사용하여 폴더 목록을 가져옵니다.
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]);}
맨 위로

파일 나열

이 코드 예제에서는 Directory 클래스의 GetFiles 메서드를 사용하여 파일 목록을 가져옵니다.
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]);}
사용자가 파일에 액세스할 때는 여러 가지 예외가 발생할 수 있습니다. 파일이 없거나 파일이 이미 사용되고 있거나 액세스하려는 폴더의 파일에 대한 사용 권한이 없을 수 있습니다. 코드를 작성할 때는 이러한 가능성을 충분히 고려해서 생성되는 예외를 처리해야 합니다.

맨 위로

단계별 예제

  1. Visual C++ .NET에서 새 Managed C++ 응용 프로그램을 만듭니다.
  2. 코드 창에서 <project name>.cpp를 엽니다.
  3. 모든 코드를 삭제합니다.
  4. 아래의 코드를 <project name>.cpp에 붙여 넣습니다.
    #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. 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 단추로 누르고 속성을 누릅니다. C/C++을 선택한 다음 미리 컴파일된 헤더를 누릅니다. 미리 컴파일된 헤더 만들기/사용에서 미리 컴파일된 헤더 사용 안 함으로 설정을 변경한 다음 프로젝트를 저장합니다.
  6. F5 키를 눌러 응용 프로그램을 빌드하고 실행합니다. 단추를 눌러 다른 동작들을 살펴봅니다.
맨 위로

참조

Managed Extensions for Visual C++에서 Windows 폼 만들기에 대한 자세한 내용은 Visual Studio .NET 도움말의 "ManagedCWinFormWiz" 예제를 참조하십시오.

Visual C++ .NET에 대한 자세한 내용은 아래의 Usenet 뉴스 그룹을 참조하십시오. 아래의 Visual C++ .NET 지원 센터를 방문하십시오.
속성

문서 ID: 307398 - 마지막 검토: 03/14/2002 09:46:00 - 수정: 1.0

Microsoft Visual C++ .NET 2002 Standard Edition

  • kbhowto kbhowtomaster kbnewsgrouplink KB307398
피드백
crosoft.com/ms.js'><\/script>");