Visual C++.NET 또는 Visual C++의 기본적인 파일 I/O 작업을 수행 하는 방법

에 Microsoft Visual C++.NET 2005/2008 ECMA C+ + 950617 이 문서의 CLI 버전을 참조 하십시오.

이 문서의 Microsoft Visual C#.NET 버전을 참조 하십시오.
304430 .
이 문서의 Microsoft Visual Basic.NET 버전을 참조 하십시오.
304427 .
이 문서에서는 다음 Microsoft.NET Framework 클래스 라이브러리 네임 스페이스:
  • System::ComponentModel
  • System::Windows::Forms
  • System::Drawing

요약

이 문서는 Microsoft Visual C++.NET 또는 Microsoft Visual C++ 2005에서 기본 파일 입/출력 (I/O) 작업을 6을 수행 하는 방법을 설명 합니다. .NET Framework 처음 접하는 경우 FileSystemObject (FSO) 대부분의 Microsoft Visual Studio 6.0 개발자 들 사이 인기 있는 비슷한.NET Framework는 파일 작업에 대 한 개체 모델을 찾을 수 있습니다. 전환을 쉽게이 문서에서 설명 된 기능은 Microsoft 기술 자료의 다음 문서를 참조 기준:
186118 Visual Basic 사용 하 여 FileSystemObject를 사용 하는 방법

FileSystemObject .NET Framework 사용할 수 있습니다. FileSystemObject 구성 요소 개체 모델 (COM) 구성 요소 이므로.NET Framework Interop 계층을 통해 개체에 액세스할 수는 있어야 합니다. .NET Framework 사용 하려는 경우에 구성 요소에 대 한 래퍼를 생성 합니다. 그러나 File 클래스, FileInfo 클래스, 디렉터리, DirectoryInfo 클래스 및 기타 관련된 클래스를.NET Framework Interop 계층의 오버 헤드 없이 FSO와 함께 사용할 수 있는 기능을 제공 합니다.

요구 사항

다음은 권장된 하드웨어, 소프트웨어, 네트워크 인프라 및 필요한 서비스 팩입니다.
  • Visual C++.NET 또는 Visual C++ 2005

파일 I/O 작업 예제

이 문서의 예제에서는 기본 파일 I/O 작업에 설명합니다. "단계별 예제" 절에서는 아래의 여섯 가지 파일 입출력 작업을 보여주는 예제 프로그램을 만드는 방법을 설명 합니다.
  • 텍스트 파일 읽기
  • 텍스트 파일 쓰기
  • 파일 정보 보기
  • 디스크 드라이브 나열
  • 폴더 내용
  • 파일 목록

텍스트 파일 읽기

다음 코드 예제는 텍스트 파일을 읽는 StreamReader 클래스를 사용 합니다. 파일의 내용은 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);
}

}

참고: Visual C++ 2005는 공용 언어 런타임 지원 컴파일러 옵션 (/clr:oldSyntax)를 앞의 코드 예제 Managed c + +로 컴파일하는 데 추가 해야 합니다. 공용 언어 런타임 지원 컴파일러 옵션을 추가 하려면 다음과이 같이 하십시오.

  1. 프로젝트를 클릭합니다 한 다음 클릭

    ProjectName 속성입니다.



    참고: P r o j 프로젝트의 이름 자리 표시자입니다.
  2. 구성 속성을 확장 한 다음

    일반.

  3. 오른쪽 창에서 눌러 선택 공용 언어 런타임 지원, 이전 구문 (/: oldsyntax)

    공용 언어 런타임 지원 프로젝트 설정입니다.
  4. 클릭

    적용을 누른 다음 확인을 클릭 합니다.

공용 언어 런타임 지원 컴파일러 옵션에 대 한 자세한 내용은 다음 Microsoft Developer Network (MSDN) 웹 사이트를 방문 하십시오.

텍스트 파일 쓰기

이 샘플 코드를 만들고 파일에 쓰는 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()) );

디스크 드라이브 나열

이 샘플 코드 시스템의 논리 드라이브를 나열 하는 디렉터리드라이브 클래스를 사용 합니다. 이 예제에서는 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]);
}

하위 폴더 나열

이 샘플 코드 디렉터리 클래스의 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]);
}

파일 목록

이 샘플 코드에서는 디렉터리 클래스의 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. Microsoft Visual Studio.NET, Microsoft Visual Studio 2005 또는 Microsoft Visual C++ 2005 익스프레스 에디션 시작 합니다.
  2. 파일 메뉴에서 가리킨
    새로만들기를 누른 다음 프로젝트를 클릭 합니다.
  3. 프로젝트 형식클릭
    Visual C++ 프로젝트입니다. 서식 파일 섹션에서 클릭
    Windows Forms 응용 프로그램 (.NET)입니다.

    참고: Visual Studio 2005에서 클릭
    프로젝트 형식에서 Visual C++ 을 선택 합니다. 서식 파일을 클릭합니다
    Windows Forms 응용 프로그램입니다.
  4. KB307398 에 입력 하면
    이름 상자에 C:\ 입력 합니다 있는
    위치 상자를 클릭 하 고
    OK.
  5. Form1 폼을 디자인 보기에서 엽니다 및 Propertries 창을 열려면 F4 키를 누릅니다.
  6. 속성 창에서 크기폴더를 확장 합니다. 너비 상자에 700을 입력 합니다. 높이 상자에 입력
    320.
  7. ListBox 컨트롤 및 6 개 추가
    Form1에 단추 컨트롤입니다.

    참고: 도구 상자를 보려면 보기 메뉴에서 도구 상자 를 클릭 합니다.
  8. 속성 창에서 변경 된
    위치, 이름, 크기
    TabIndex및 다음과 같이 이러한 컨트롤의 텍스트 속성:
    컨트롤 ID위치이름크기TabIndex텍스트
    button132, 500button1112, 231텍스트 파일 읽기
    button264, 500button2112, 232텍스트 파일 쓰기
    button396, 500button3112, 233파일 정보 보기
    button4128, 500button4112, 234드라이브 나열
    button5500, 160button5112, 235하위 폴더 나열
    button6192, 500button6112, 236파일 목록
    listBox124, 24listBox1450, 2000listBox1
  9. Form1.h 파일을 엽니다. Form1 클래스 선언에 다음 코드를 사용 하 여 전용 문자열 변수를 하나 선언 합니다.
    private:String *windir;
  10. Form1 클래스의 생성자에 다음 코드를 추가 합니다.
    windir = System::Environment::GetEnvironmentVariable("windir");
  11. 파일 입 출력 작업을 수행 하려면 System::IO네임 스페이스를 추가 합니다.
  12. Form1 디자인 보기에서 열려면 SHIFT + f 7을 누릅니다. 텍스트 파일 읽기 단추를 두 번 클릭 한 다음 다음 코드를 붙여 넣습니다.

    참고: Visual C++ 2005에서 보기 메뉴에서 디자이너 를 클릭 합니다.
    // How to read a text file:// Use try...catch to deal with a 0 byte file or a non-existant file.
    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. Form1 디자인 보기에서 텍스트 파일 쓰기 단추를 두 번 클릭 한 다음 다음 코드를 붙여 넣습니다.
    // This demonstrates how to create and to write to a text file.StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");
    pwriter->WriteLine(S"The file was created by using the StreamWriter class.");
    pwriter->Close();
    listBox1->Items->Clear();
    String *filew = new String(S"File written to C:\\KBTest.txt");
    listBox1->Items->Add(filew);
  14. Form1 디자인 보기에서 파일 정보 보기 단추를 두 번 클릭 한 다음 메서드에서 다음 코드를 붙여넣습니다.
    // This code retrieves file properties. The 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()) );
  15. Form1 디자인 보기에서 목록 드라이브 단추를 두 번 클릭 한 다음 다음 코드를 붙여 넣습니다.
    // This 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]);
    }
  16. Form1 디자인 보기에서 하위 목록 단추를 두 번 클릭 한 다음 다음 코드를 붙여 넣습니다.
    // This code obtains a list of folders. This example uses the 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]);
    }
  17. Form1 디자인 보기에서 목록 파일 단추를 두 번 클릭 한 다음 다음 코드를 붙여 넣습니다.
    // This code obtains a list of files. This example uses the 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]);
    }
  18. 빌드하고 다음 프로그램을 실행 하려면 CTRL + f 5를 누릅니다.

전체 코드 예제

참고: Visual C++ 2005에서 실행할 때 다음 코드를 변경 해야 합니다.
//Form1.h#pragma once


namespace KB307398
{
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>
/// Summary for Form1
///
/// WARNING: If you change the name of this class, you will need to change the
/// 'Resource File Name' property for the managed resource compiler tool
/// associated with all .resx files this class depends on. Otherwise,
/// the designers will not be able to interact properly with localized
/// resources associated with this form.
/// </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>
/// Required designer variable.
/// </summary>
System::ComponentModel::Container * components;

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </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)
{// This code shows how to read a text file.
// The try...catch code is to deal with a 0 byte file or a non-existant file.
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)
{// This code demonstrates how to create and to write to a text file.
StreamWriter* pwriter = new StreamWriter(S"c:\\KBTest.txt");
pwriter->WriteLine(S"The file was created by using the StreamWriter class.");
pwriter->Close();
listBox1->Items->Clear();
String *filew = new String(S"The file was written to C:\\KBTest.txt");
listBox1->Items->Add(filew);
}

private: System::Void button3_Click(System::Object * sender, System::EventArgs * e)
{// This code retrieves file properties. This 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()) );
}

private: System::Void button4_Click(System::Object * sender, System::EventArgs * e)
{// The code 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]);
}
}

private: System::Void button5_Click(System::Object * sender, System::EventArgs * e)
{// This code obtains a list of folders. This example uses the 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]);
}
}

private: System::Void button6_Click(System::Object * sender, System::EventArgs * e)
{// This code obtains a list of files. This example uses the 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]);
}
}

};
}

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

using namespace KB307398;

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

참조

자세한 내용은 다음 Microsoft 웹 사이트를 방문 하십시오.Managed Extensions for C++ Windows forms을 만드는 방법에 대 한 자세한 내용은 Visual Studio.NET 도움말의 "ManagedCWinFormWiz" 샘플을 참조 하십시오.
속성

문서 ID: 307398 - 마지막 검토: 2017. 2. 6. - 수정: 2

Microsoft Visual C++ 2008 Express Edition, Microsoft Visual C++ 2005 Express Edition, Microsoft Visual C++ .NET 2003 Standard Edition

피드백