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

기술 자료 번역 기술 자료 번역
기술 자료: 307398 - 이 문서가 적용되는 제품 보기.
이 문서는 이전에 다음 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 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. 솔루션 탐색기에서 프로젝트 이름을 마우스 오른쪽 단추로 누르고 속성을 누릅니다. C/C++을 선택한 다음 미리 컴파일된 헤더를 누릅니다. 미리 컴파일된 헤더 만들기/사용에서 미리 컴파일된 헤더 사용 안 함으로 설정을 변경한 다음 프로젝트를 저장합니다.
  6. F5 키를 눌러 응용 프로그램을 빌드하고 실행합니다. 단추를 눌러 다른 동작들을 살펴봅니다.

참조

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

Visual C++ .NET에 대한 자세한 내용은 아래의 Usenet 뉴스 그룹을 참조하십시오.
Microsoft.public.dotnet.languages.vc
아래의 Visual C++ .NET 지원 센터를 방문하십시오.
Visual C++ .NET(2002) 지원 센터

속성

기술 자료: 307398 - 마지막 검토: 2002년 3월 14일 목요일 - 수정: 1.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Visual C++ .NET 2002 Standard Edition
키워드:?
kbhowto kbhowtomaster kbnewsgrouplink KB307398

피드백 보내기

 

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