C는 파일 작업을 통해 파일을 생성합니다. 파일 쓰기 및 읽기의 예. fstream 클래스: 임의 파일 액세스

C++에서 텍스트 파일 작업.

파일에는 텍스트와 바이너리라는 두 가지 주요 유형이 있습니다. 파일을 사용하면 사용자는 키보드를 사용하지 않고도 디스크에서 직접 대량의 데이터를 읽을 수 있습니다.

    텍스트임의의 문자로 구성된 파일이 호출됩니다. 각 줄은 줄 끝 문자로 끝나는 줄로 구성됩니다. 파일 자체의 끝은 "파일 끝" 기호로 표시됩니다. 정보를 기록할 때 텍스트 파일, 모든 텍스트 편집기를 사용하여 볼 수 있습니다. 모든 데이터는 문자 유형으로 변환되어 문자 형식으로 저장됩니다.

    새 파일을 만들어 작업 공간에 추가하세요.

    사용자가 다음과 같은 양식을 제출한 경우. 이러한 각 파일 형식을 작업 공간에 추가할 수도 있습니다. 일반적으로 일반 소스 파일과 동일하게 작동하지만 다음을 지원합니다. 추가 보호암호화.

    • 소스 파일.
    • 헤더 파일.
    • 헤더 파일의 확장자는 .
    • 텍스트 파일.
    • 텍스트 파일을 사용하여 메모를 문서화할 수 있습니다.
    • 두 가지가있다 특별한 유형텍스트 파일.
    새 소스 파일을 생성할 때 현재 작업공간에 파일을 추가할 수 있는 옵션이 있습니다.

    안에 바이너리파일에서는 정보가 특정 크기의 블록 형태로 읽고 쓰여지며, 여기에는 모든 유형과 구조의 데이터가 저장될 수 있습니다.

파일 작업을 하려면 특수 데이터 유형, 라고 불리는 스트림. 흐름 ifstream읽기 모드에서 파일 작업에 사용됩니다. 스트림의녹음 모드에서. 쓰기 및 읽기 모드에서 파일을 작업하려면 스트림이 사용됩니다. fstream.

ifstream 클래스: 파일 읽기

기본 콘텐츠로 새 소스 파일을 생성할 수도 있습니다. "Fill by Default" 체크박스를 체크하면 새로운 소스 파일이 생성됩니다. 다음 텍스트. 각 함수에 대해 도움말 섹션에는 함수의 프로토타입이 포함된 헤더 파일이 표시됩니다. 파일을 생성할 때 기본 폴더 또는 사용자 정의 폴더를 지정할 수 있습니다.

소스 파일 템플릿 설정

코드에서 이러한 파일을 참조할 때 항상 경로를 지정할 수 있으므로 이 선택은 조직적입니다. 새 소스 파일을 생성하면 " 새로운 파일» 기본 내용 채우기 확인란이 나타납니다. 이 템플릿 파일을 열고, 편집하고, 저장하여 새 기본 소스 파일의 내용을 사용자 정의할 수 있습니다.

암호화된 소스 파일 생성

입력하다 새 비밀번호입력한 비밀번호를 확인하세요. 비밀번호 대화 상자.

C++ 프로그램에서 텍스트 파일로 작업할 때 iostream 및 fstream 라이브러리를 포함해야 합니다.

하기 위해 써 내려 가다데이터를 텍스트 파일로 변환하려면 다음이 필요합니다.

    스트림 유형의 변수를 설명합니다.

    정보를 파일로 출력합니다.

    파일을 꼭 닫으세요.

을 위한 독서텍스트 파일의 데이터에는 다음이 필요합니다.

기존 소스 파일 암호화





"비밀번호 기억" 확인란을 선택하면 비밀번호를 30일 동안 기억할 수 있습니다. 파일 메뉴 선택: 암호화된 파일로 저장하고 파일 이름을 입력하여 암호화된 복사본 생성 소스 코드.

기존 암호화된 파일의 비밀번호를 변경하려면

기존 파일을 열고 작업공간에 추가합니다. 작업공간에 파일을 추가하면 다음과 같은 이점이 있습니다. 다음과 같은 장점프로그램 작성.

    ifstream 유형의 변수를 설명합니다.

    open 함수를 사용하여 파일을 엽니다.

    파일을 닫습니다.

기록정보를 텍스트 파일로

    앞에서 언급했듯이 텍스트 파일 작업을 시작하려면 다음을 설명해야 합니다. 유형 변수스트림. 예를 들어 다음과 같습니다.

    파일에 정보를 쓰기 위해 변수 F가 생성됩니다.

    작업공간에 추가하지 않고 기존 파일 열기

    작업 공간에 추가된 파일은 창 폴더에 아이콘으로 나타납니다. 작업 공간. 워크스페이스에 추가된 소스 파일만 컴파일할 수 있습니다. 별도의 소스 파일에 인코딩된 함수가 있지만 소스 파일이 동일한 작업 공간 파일의 일부인 경우 프로그래밍 방식으로 작업 공간 파일을 로드 및 생성하고 함수를 호출할 수 있습니다.

    작업공간에 열려 있는 파일 추가

    작업공간 파일을 패키지로 지정합니다. 임시 사용자 또는 사용자 정의 파일. 사전 정의된 6개의 폴더 각각에는 작업공간에 추가된 파일이 포함되어 있습니다. 다른 방법들.

    다음 단계에서는 쓰기를 위해 파일을 열어야 합니다. 안에 일반적인 경우스트림 열기 연산자는 다음과 같습니다:

F.open("파일", 모드);

여기서 F는 ofstream으로 설명되는 변수입니다.

파일 - 이름디스크의 파일

모드 - 열려 있는 파일 작업 모드입니다.

전체 파일 이름을 지정할 때 이중 슬래시를 사용해야 한다는 점에 유의하세요. 예를 들어 다음 위치에 있는 noobs.txt 파일의 전체 이름은 다음과 같습니다. 게임 폴더 D: 드라이브에 다음을 작성해야 합니다.

특정 문자열을 포함하는 파일 검색

6개 폴더 모두에 있는 파일은 다른 폴더로 드래그하여 이동할 수 있지만 다른 폴더로 파일을 드래그할 수는 없습니다. 임시 폴더. 각 패키지 폴더에는 " 사용자 파일"에는 User Files 폴더에 있는 파일이 포함되어 있습니다. 작업공간 트리를 사용하여 작업공간 탐색 섹션에서. 찾기 콤보 상자에 원하는 검색 문자열을 입력합니다.

fstream 클래스: 임의 파일 액세스

전체 단어인 문자열 인스턴스로 검색을 제한하려면 전체 단어 일치만을 선택합니다. 전체 단어줄이 줄의 시작이나 끝 부분에 나타나지 않는 한 공백이나 구두점으로 둘러싸인 줄입니다. 검색에 하위 폴더를 포함하려면 하위 폴더 검색을 선택합니다. . 검색 문자열이 포함된 행이 표시됩니다.

D:\\game\\noobs.txt.

파일은 다음 모드 중 하나로 열 수 있습니다.

ios::in - 데이터 읽기 모드로 파일을 엽니다. 이 모드는 ifstreams의 기본 모드입니다.

ios::out - 데이터 쓰기 모드로 파일을 엽니다(이 경우 기존 파일에 대한 정보가 삭제됨). 이 모드는 ofstreams의 기본 모드입니다.

작업공간 트리를 사용하여 파일 탐색

함수를 컴파일한 후 소스 파일작업 공간 트리에서 컴파일 타임에 발견된 함수 정의, 함수 선언, 클래스, 구조 및 유형 정의를 표시할 수 있습니다. 그런 다음 함수 정의, 함수 선언, 클래스, 구조 또는 유형 정의에 대한 작업 공간에서 트리 노드를 확장하여 소스 파일을 열 수 있습니다.

작업공간에서 파일 제거

작업 공간에 추가된 파일은 작업 공간 창에 관련 아이콘이 있습니다.

작업공간에서 파일 제외

다음으로 filename 명령줄 인수에 지정된 파일을 읽는 기능을 추가하겠습니다. 목록 12-3에는 잘 작동할 Emily Dickinson의 시가 있습니다! 그리고 우리 둘이 있어요 - 말하지 마세요! 개구리처럼 공개적으로 낮에 이름을 부르기 전에 늪에 감탄하기 전에!

ios::app - 파일 끝에 데이터를 쓰는 모드로 파일을 엽니다.

ios::ate - 이미 열려 있는 파일의 끝으로 이동합니다.

ios::trunc - 파일을 지웁니다. 이는 ios::out 모드에서도 발생합니다.

ios::nocreate - 파일이 존재하지 않으면 열지 않습니다.

ios::noreplace - 열지 않음 기존 파일.

mode 매개변수가 없을 수 있으며, 이 경우 파일은 이 스트림에 대한 기본 모드로 열립니다.

목록 12-3: 시 나는 아무도 아니다! 누구세요? 에밀리 디킨슨 누가 할 것인가 좋은 테스트. 목록 12-4: 파일의 내용 읽기, 두 번째로 표시된논쟁. 여기에는 파일을 읽은 후의 내용이 포함됩니다. 우리의 코드는 파일의 내용을 읽고 인쇄합니다. 주요 기능에는 많은 책임이 있습니다. 각 기능이 하나의 아이디어만을 담당한다면 기능은 일반적으로 더 명확하고 유지 관리가 더 쉽습니다. 또 다른 문제는 우리가 오류를 처리하지 않는다는 것인데, 오류가 있을 수 있습니다. 우리 프로그램은 아직 규모가 작지만 이러한 단점은 큰 문제, 그러나 프로그램이 성장함에 따라 이를 수정하는 것이 더 어려워질 것입니다.

어떤 모드에서든 파일을 성공적으로 열면 F 변수는 true를 저장하고, 그렇지 않으면 false를 저장합니다. 이를 통해 파일 열기 작업의 정확성을 확인할 수 있습니다.

파일 열기(다음과 같이 예를 들어보자파일 D:\\game\\noobs.txt) 다음 방법 중 하나를 사용하여 녹화 모드에서:

// 첫 번째 방법

오브스트림 F;

F.open("D:\\game\\noobs.txt", ios::out);

좋은 습관은 리팩토링을 시작하는 것입니다. 초기 단계프로그램을 개발할 때 적은 양의 코드를 리팩토링하는 것이 훨씬 쉽기 때문에 지금 그렇게 하겠습니다. 참고: 하나 더 있습니다 선택적 매개변수, 그러나 우리는 처음 세 가지에만 관심이 있습니다.

사용될 수 있다 다음 값. 따라서 사용하려는 상수를 정의해야 합니다. 파일은 구조화되지 않은 단일 문자 시퀀스에 지나지 않으므로 어떤 종류의 데이터가 처리되는지는 중요하지 않습니다.

데이터 처리를 통해서만 개별 기호가 의미와 구조를 획득합니다. 먼저 읽기 위해 간단한 텍스트 파일을 열어야 합니다. 이 경우 다음과 같이 진행하십시오. 경로 지정은 모든 유효한 문자열을 허용합니다. 스트림에 액세스하는 방법을 지정하려면 모드를 사용하세요.

  • 버퍼 - 시작 주소, 현재 포인터, 크기.
  • 파일 핸들.
  • 포인터 위치를 읽거나 씁니다.
물론 한 번에 여러 파일을 열 수도 있습니다.

//두 번째 방법, ios::out 모드가 기본 모드입니다.

// 을 위한 흐름스트림의

오브스트림 F;

//세 번째 방법은 변수 설명과 스트림 유형을 결합합니다.

//하나의 명령문으로 파일 열기

ofstream F("D:\\game\\noobs.txt", ios::out);

쓰기 모드로 파일을 열면 정보를 쓸 수 있는 빈 파일이 생성됩니다.

그러면 첫 번째 인수에는 다음이 포함되어야 합니다. 둘 사이에는 또 다른 차이점이 있다 운영체제. 이미 사용한 읽기 액세스 외에도 스트림에 액세스하는 다른 방법이 많이 있습니다. 표 3은 개요를 제공합니다. 기존 체제그리고 그 의미.

포함 및 추출 연산자

이 책을 다음과 같이 활용하려면 참고정보, 표 4는 자세한 내용을 보여줍니다. 빠른 검토각 모드. 2개를 붙일 수도 있어요 추가 문자텍스트와 텍스트를 구별하는 이러한 모드에 바이너리 파일. 텍스트 파일과 바이너리 파일의 차이점을 간단히 설명하자면, 텍스트 파일은 사람이 편집기를 사용하여 읽을 수 있는 반면, 바이너리 파일이나 바이너리 문자는 컴퓨터가 이해하는 언어를 구성합니다. 인간에게는 바이너리 파일이 거의 구별되지 않습니다.

기존 파일을 쓰기 전 모드로 열려면 모드가 ios::app이어야 합니다.

녹음 모드에서 파일을 연 후 표준 출력 장치 대신 화면과 동일한 방식으로 쓸 수 있습니다.시합열린 파일의 이름을 지정해야 합니다.

예를 들어 변수 a를 스트림 F에 쓰려면 출력 문은 다음과 같습니다.

바이너리 모드에서는 이 변환이 수행되지 않습니다. 물론 명령줄 인수를 사용하여 열려는 파일의 이름을 지정할 수도 있습니다. 먼저 두 개의 인수가 입력되었는지 확인합니다. 명령줄. 그렇지 않은 경우 해당 오류 메시지가 표시됩니다. 그렇지 않으면 두 번째 인수를 사용하여 명령줄에 지정된 파일을 열려고 시도합니다. 오류가 발생하는 경우 일반적으로 잘못된 경로 지정이나 부적절한 파일 권한으로 인해 발생합니다.

이 상수는 프로세스당 동시에 열 수 있는 파일 수를 결정합니다. 아직 이 사항을 이해하지 못했다면 걱정하지 마세요. 문제가 해결될 것입니다. 다음 페이지. 다음 예에서는 텍스트 파일을 설정하고 첨부하는 방법을 보여줍니다.

변수 b, c, d의 스트림 G에 대한 순차적 출력의 경우 출력 연산자는 다음과 같습니다.

G<

스트림 닫기는 다음 연산자를 사용하여 수행됩니다.

예:

텍스트 파일 D:\\game\\noobs.txt를 만들고 여기에 n개의 실수를 씁니다.

#include "stdafx.h"

#포함하다

#포함하다

#포함하다

네임스페이스 std 사용;

그러면 이 파일에는 "그리움이 가면 그리움에 대한 그리움은 지속된다"고 적혀 있습니다. 작동 방식이 빠르게 설명됩니다. 하지만 체리가 미래에 예약어가 될 것이라고는 장담할 수 없기 때문에 소문자로도 쓸 수 있다. 모든 파일 작업, 예: 다음 예에서는 이것이 변경됩니다.

파일 쓰기 및 읽기의 예

스크립트가 몇 번이나 실행되더라도 격언은 단 한 번만 존재합니다. 텍스트 파일은 어떻게 읽나요? 다음과 같아야합니다. 안드레스 에만 호세 마리아 아즈나르 펠리페 곤잘레스 샤를 드 골 루이 보나파르트. 마지막 단계에서는 전체 파일을 읽습니다. 스크립트는 각 항목이 한 줄에 있는 경우에만 작동합니다.

정수 메인()

setlocale(LC_ALL, "RUS");

int i, n;

더블에이;

//파일에 데이터를 쓰기 위한 스트림을 설명합니다.

스트림의 에프;

//쓰기 모드로 파일을 연다.

//방법iOS:: 밖으로기본적으로 설치됨

f.open("D:\\game\\noobs.txt", ios::out);

//실수 개수 입력

시합<<" N="; >> N;

다이아몬드 연산자를 사용하여 파일 내용을 읽은 다음 배열로 전달하는 것은 느린 것으로 간주됩니다. 다음 예에서는 이 작업을 더 빠르게 수행하는 방법을 보여줍니다. 파일을 읽기 위해 다이아몬드 연산자가 사용하는 개행 문자를 사용하는 경우는 매우 드뭅니다. 그럼에도 불구하고 이 경우는 가능하다. 예를 들어, 이런 것이 있을 수 있습니다.

라인 안드레스 에만 라인 마리아 마르티네스 라인 베르너 라인. Binsengrün 라인 Heinrich Mann 라인 Gottfried Keller 라인. 에른스트 바이스 라인 로버트 무질. 쓰기는 줄과 줄 사이에서 이루어집니다. 이 맥락에서 또 다른 기호가 정의될 ​​수 있습니다. 그것은 다음과 같습니다. 경로는 운영 체제에 따라 다릅니다. 경로 없이 파일명만 지정하면 프로그램이 위치한 디렉터리에서 파일을 검색합니다. 매개변수 모드는 파일을 열어야 하는 모드를 지정합니다. 모드에 따라 파일에서 수행할 수 있는 작업(읽기, 쓰기 또는 둘 다)이 결정됩니다.

//실수 입력 루프

//그리고 파일에 씁니다

(i=0; 나는

시합<<"a=";

//숫자를 입력하세요

신>>a;

에프<

//스트림 닫기

f.닫기();

system("일시중지");

0을 반환합니다.

_______________________________________________________________

텍스트 파일에서 정보를 읽으려면 다음과 같은 변수를 설명해야 합니다. ifstream. 그런 다음 연산자를 사용하여 읽을 파일을 열어야 합니다. 열려 있는. 변수가 F라고 하면 처음 두 명령문은 다음과 같습니다.

F.open("D:\\game\\noobs.txt", ios::in);

읽기 모드에서 파일을 연 후에는 키보드에서와 같은 방식으로 정보를 읽을 수 있습니다.데이터를 읽을 스트림의 이름을 지정합니다.

예를 들어 스트림 F에서 변수 a로 읽으려면 입력 문은 다음과 같습니다.

텍스트 편집기에서 두 숫자 사이에 공백, 탭, 줄 끝 문자 중 하나 이상이 있으면 분리된 것으로 간주됩니다. 프로그래머가 텍스트 파일에 저장할 값과 개수를 미리 알고 있으면 좋습니다. 그러나 파일에 저장된 값의 종류는 간단하게 알 수 있지만 그 개수는 다를 수 있는 경우가 많습니다. 이 문제를 해결하려면 파일에서 값을 한 번에 하나씩 읽어야 하며, 읽기 전에 파일의 끝에 도달했는지 확인해야 합니다. 이에 대한 기능이 있습니다 에프. ().

여기서 F는 스레드의 이름이며, 함수는 파일 끝에 도달했는지 여부에 따라 true 또는 false라는 부울 값을 반환합니다. 따라서 전체 파일의 내용을 읽는 루프는 다음과 같이 작성할 수 있습니다.

//파일에서 값을 읽도록 구성, 실행

//파일 끝에 도달하면 루프가 중단됩니다.

//이 경우 F.eof()는 true를 반환합니다.

동안 (!F.eof())

예:

텍스트 파일 D:\\game\\noobs.txt는 실수를 저장하고 화면에 표시하며 숫자를 계산합니다.

#include "stdafx.h"

#포함하다

#포함하다

#포함하다

#포함하다

네임스페이스 std 사용;

정수 메인()

setlocale(LC_ALL, "RUS");

정수 n=0;

플로트 a;

fstream F;

//읽기 모드로 파일 열기

F.open("D:\\game\\noobs.txt");

//파일이 제대로 열렸다면

//파일에서 값을 읽는 루프; 루프 실행이 중단됩니다.

//파일 끝에 도달하면 이 경우 F.eof()는 true를 반환합니다.

동안 (!F.eof())

//스트림 F에서 다음 값을 변수 a로 읽습니다.

에프>>아;

//변수 a의 값을 화면에 출력

시합<

//읽은 숫자 수를 늘린다.

//스트림 닫기

F.닫기();

//읽은 숫자의 개수를 화면에 입력

시합<<"n="<

//파일 열기가 잘못된 경우 출력

//해당 파일이 없다는 메시지

그렇지 않으면 cout<<" Файл не существует"<

system("일시중지");

0을 반환합니다.

C++. 바이너리 파일 처리

이진 파일에 정보를 쓸 때 문자와 숫자는 일련의 바이트로 기록됩니다.

하기 위해 써 내려 가다데이터를 바이너리 파일로 변환하려면 다음이 필요합니다.

    FILE *filename 연산자를 사용하여 FAIL * 유형의 파일 변수를 설명합니다. 여기서 filename은 파일에 대한 포인터가 저장될 변수의 이름입니다.

    fwrite 함수를 사용하여 파일에 정보 쓰기

하기 위해 세다 b 바이너리 파일의 데이터에는 다음이 필요합니다.

    FILE 유형의 변수 설명 *

    fopen 함수를 사용하여 파일 열기

    fclose 함수를 사용하여 파일 닫기

바이너리 파일 작업에 필요한 기본 기능입니다.

을 위한 발견파일은 fopen 기능용입니다.

FILE *fopen(const *파일명, const char *모드)

여기서 filename은 열려 있는 파일의 전체 이름을 저장하는 문자열이고, mode는 파일 작업 모드를 결정하는 문자열입니다. 다음 값이 가능합니다:

"rb" - 읽기 모드에서 바이너리 파일을 엽니다.

"wb" - 녹음용 바이너리 파일을 만듭니다. 존재하는 경우 해당 내용이 지워집니다.

"ab" - 파일 끝에 추가할 바이너리 파일을 만들거나 엽니다.

"rb+" - 읽기-쓰기 모드로 기존 바이너리 파일을 엽니다.

"wb+" - 읽기-쓰기 모드로 바이너리 파일을 열면 기존 파일이 지워집니다.

"ab+" - 기존 정보를 수정하고 파일 끝에 새 정보를 추가하기 위해 바이너리 파일을 열거나 생성합니다.

파일이 성공적으로 열리지 않으면 함수는 파일 변수 f에 NULL을 반환합니다. 파일을 연 후 해당 파일의 0번째 바이트를 사용할 수 있고 파일 포인터는 0이며 읽거나 쓸 때 그 값은 읽은(쓰기) 바이트 수만큼 이동됩니다. 파일 포인터의 현재 값은 읽기 또는 쓰기 작업이 발생하는 바이트 번호입니다.

을 위한 폐쇄파일이 fclose 기능을 위한 것입니다.

int fclose(FILE *파일명);

파일이 성공적으로 닫혔으면 0을 반환하고, 그렇지 않으면 NULL을 반환합니다.

제거 기능은 제거파일.

int 제거(const char *파일명);

이 함수는 디스크에서 filenema라는 파일을 삭제합니다. 삭제할 파일을 닫아야 합니다. 파일을 삭제할 수 없는 경우 함수는 0이 아닌 값을 반환합니다.

을 위한 이름 바꾸기파일의 이름 바꾸기 기능은 다음과 같습니다.

int rename(const char *기존 파일명, const char *새 파일명);

첫 번째 매개변수는 이전 파일 이름이고 두 번째 매개변수는 새 이름입니다. 프로그램이 성공적으로 종료되면 0을 반환합니다.

독서 fread 함수를 사용하여 바이너리 파일에서 가져오는 작업이 수행됩니다.

fread(void *ptr, 크기, n, FILE *파일 이름);

fread 함수는 filename 파일에서 size 크기의 n 요소를 배열 ptr로 읽습니다. 이 함수는 읽은 요소 수를 반환합니다. 파일에서 읽은 후 해당 포인터는 n*size 바이트만큼 이동됩니다.

기록바이너리 파일에 대한 작업은 fwrite 함수를 사용하여 수행됩니다.

fwrite(const void *ptr, size, n, FILE *파일명);

fwrite 함수는 size 크기의 n 요소로 구성된 배열 ptr에서 filename 파일에 씁니다. 이 함수는 작성된 요소의 수를 반환합니다. 파일에 정보를 쓴 후 포인터는 n*size 바이트만큼 이동됩니다.

을 위한 파일 끝 제어 feof 기능이 있습니다.

int feof(FILE *파일명);

파일 끝에 도달하면 0이 아닌 값을 반환합니다.

예:

바이너리 파일 D:\\game\\noobs.dat를 만들고 여기에 n개의 정수와 n개의 실수를 씁니다.

#include "stdafx.h"

#포함하다

네임스페이스 std 사용;

정수 메인()

setlocale(LC_ALL, "RUS");

int n, i;

더블에이;

//쓰기 모드에서 바이너리 파일 생성

f=fopen("D:\\game\\noobs.dat", "wb");

// 입력 숫자N

시합<<"n="; cin>>n;

fwrite(&n, sizeof(int), 1, f);

//n개의 실수를 입력하는 루프

(i=0; 나는

//다음 실수 입력

시합<<"a=";

신>>a;

//바이너리 파일에 실수 쓰기

fwrite(&a, sizeof(double), 1, f);

// 닫다 파일

fclose(f);

system("일시중지");

0을 반환합니다.

예:

이전 작업에서 생성된 바이너리 파일 D:\\game\\noobs.dat의 내용을 표시합니다.

#include "stdafx.h"

#포함하다

네임스페이스 std 사용;

정수 메인()

setlocale(LC_ALL, "RUS");

int n, i;

더블 *a;

파일 *f; //파일 변수 설명

//기존 바이너리 파일을 읽기 모드로 엽니다.

//파일에서 하나의 정수를 변수 n으로 읽어 들입니다.

//n을 화면에 출력

시합<<"n="<

//n개의 숫자 배열에 대한 메모리 할당

a=새로운 더블[n];

//파일에서 n개의 실수를 배열 a로 읽어옵니다.

//배열을 화면에 출력

(i=0; 나는

시합<

시합<

// 닫다 파일

fclose(f);

system("일시중지");

0을 반환합니다.

바이너리 파일- 순차 데이터 구조는 파일을 연 후 파일에 저장된 첫 번째 바이트를 사용할 수 있습니다. 파일에서 순차적으로 데이터를 쓰거나 읽을 수 있습니다. 15번째 숫자를 세고 그 다음 첫 번째 숫자를 세어야 한다고 가정해 보겠습니다. 순차 액세스를 사용하면 다음과 같은 방법으로 이를 수행할 수 있습니다.

int n, i;

더블에이;

파일 *f;

f=fopen("D:\\game\\noobs.dat", "rb");

(i=0; 나는<15; i++)

fclose(f);

f=fopen("D:\\game\\noobs.dat", "rb");

fread(&a, sizeof(double), 1, f);

fclose(f);

보시다시피 파일에서 숫자를 읽은 다음 파일을 다시 여는 것은 가장 편리한 방법이 아닙니다. 파일 포인터를 주어진 바이트로 이동하려면 fseek 함수를 사용하는 것이 훨씬 더 편리합니다.

int fseek(FILE *파일 이름, long int 오프셋, int 원점);

이 함수는 원점 및 오프셋 값에 따라 현재 파일 위치 포인터 F를 설정합니다. offset 매개변수는 파일 포인터가 Origin 매개변수에 의해 지정된 원점을 기준으로 오프셋되는 바이트 수와 같습니다. Origin 매개변수의 값은 stdio.h 헤더에 정의된 다음 오프셋 값 중 하나여야 합니다.

SEEK_SET - 파일의 시작 부분부터;

SEEK_CUR - 현재 위치에서;

SEEK_END - 파일의 끝부터.

이 함수는 작업이 성공하면 0 값을 반환하고, 오프셋 실행 중에 실패가 발생하면 0이 아닌 값을 반환합니다.

fseek 함수는 실제로 파일의 모든 값에 대한 직접 액세스를 구현합니다. 파일에 있는 값의 위치(바이트 수)만 알면 됩니다. 다음 문제를 예로 들어 바이너리 파일에서 직접 액세스를 사용하는 방법을 살펴보겠습니다.

이전에 생성된 바이너리 파일 D:\\game\\noobs.dat에서 가장 큰 실수와 가장 작은 실수를 교환합니다.

문제 해결을 위한 알고리즘은 다음 단계로 구성됩니다.

    파일의 실수를 배열로 읽어 들입니다.

    배열 a에서 최대(max) 및 최소(min) 값과 해당 숫자(imax, imin)를 검색합니다.

    파일 포인터를 최대값으로 이동하고 min을 씁니다.

    파일 포인터를 최소값으로 이동하고 최대값을 씁니다.

아래는 댓글 문제를 해결하기 위한 프로그램의 텍스트입니다.

#include "stdafx.h"

#포함하다

네임스페이스 std 사용;

정수 메인()

setlocale(LC_ALL, "RUS");

int n, i, imax, imin;

더블 *a, 최대, 최소;

파일 *f;

//읽기-쓰기 모드로 파일 열기

f=fopen("D:\\game\\noobs.dat", "rb+");

//파일의 숫자를 변수 n으로 읽어 들입니다.

//파일의 실수

fread(&n, sizeof(int), 1, f);

시합<<"n="<

//실수를 저장하기 위한 메모리 할당,

//배열 a에 저장됩니다.

a=새로운 더블[n];

//파일에서 배열과 실수로 읽어옵니다.

fread(a, sizeof(double), n, f);

//최대 및 최소 요소 검색

//배열 a와 해당 인덱스

(imax=imin=0, max=min=a, i=1; i의 경우)

만약 (a[i]>최대)

최대=a[i];

만약 (a[i]

최소=a[i];

// 움직이는 바늘 에게 최고 요소

fseek(f, sizeof(int)+imax*sizeof(double), SEEK_SET);

//최대 파일 요소 대신 min을 씁니다.

fwrite(&min, sizeof(double), 1, f);

// 움직이는 바늘 에게 최저한의 요소

fseek(f, sizeof(int)+imin*sizeof(double), SEEK_SET);

//최소 파일 요소 대신 최대값 쓰기

fwrite(&max, sizeof(double), 1, f);

//파일 닫기

fclose(f);

//사용 가능한 메모리

삭제 [ ]ㅏ;

system("일시중지");

이 섹션에서는 파일과 표준 MFC CFileDialog 클래스를 사용하는 두 가지 방법을 설명합니다.


1. C에서 파일 작업(C++에서도 작동)..


    #포함하다
    #포함하다

보이드 메인(void)
{
파일 *파일;
char* 파일명 = "file.txt";
char load_string = "없음";

File = fopen(파일_이름, "w");

Fputs("문자열", 파일);

File = fopen(파일_이름, "r");
if(파일 != 0)
{
fgets(load_string, 50, 파일);
쿠우트)
또 다른
{
쿠우트)
fclose(파일);
) 파일 작업에 대한 기능 설명은 라이브러리에 있습니다. stdio.h
먼저 FILE 유형의 변수에 대한 포인터를 생성해야 합니다( 파일* 파일;).
파일 열기는 fopen 함수( file = fopen(파일명, "w");)
이 함수의 첫 번째 매개변수는 파일 이름이고, 두 번째 매개변수는 파일을 열어야 하는 모드를 지정합니다. "여"- 녹음을 위해 열려 있습니다. "아르 자형"- 독서를 위해 열려있습니다. "ㅏ"- 파일 추가(다른 모드도 있지만 가장 많이 사용되는 모드입니다). 파일에서 데이터 쓰기 및 읽기는 다음 기능에 의해 수행됩니다. fputc, fputs, fgetc, fgets, fprintf, fscanf(이러한 기능에 대한 설명은 다음을 참조하세요. stdio.h).
파일 닫기는 fclose 함수를 호출하여 수행됩니다( fclose(파일);).

MFC(클래스 CFile, CStdioFile, ...) 및 표준 MFC 클래스 CFileDialog를 사용하여 파일 작업.


MFC 라이브러리에는 파일 작업을 위한 여러 클래스가 포함되어 있습니다. 아래에 설명된 클래스는 기본 클래스에서 상속됩니다.

C파일.

클래스 CF 파일

C파일파일 작업을 위해 설계되었습니다. 파일을 생성, 읽기, 쓰기 등이 가능한 객체로 표현하여 파일을 더 쉽게 사용할 수 있도록 합니다.

파일에 액세스하려면 먼저 CFile 클래스의 개체를 만들어야 합니다. 클래스 생성자를 사용하면 해당 객체를 생성한 후 즉시 파일을 열 수 있습니다. 그러나 나중에 메소드를 사용하여 파일을 열 수 있습니다

열려 있는.

파일 열기 및 생성

클래스 객체 생성 후 C파일메소드를 호출하여 파일을 열 수 있습니다열려 있는. 메서드는 열려는 파일의 경로와 사용 모드를 지정해야 합니다. 메소드 프로토타입열려 있는다음과 같은 형식을 갖습니다:

가상 BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags, CFileException* pError=NULL);

lpszFileName 매개변수로 열려는 파일의 이름을 지정해야 합니다. 파일 이름만 지정할 수도 있고 전체 경로가 포함된 전체 파일 이름을 지정할 수도 있습니다.

두 번째 매개 변수인 nOpenFlags는 Open 메서드가 파일에 대해 수행하는 작업과 파일의 특성을 지정합니다. 다음은 nOpenFlags 매개변수에 가능한 몇 가지 값입니다.

  • CFile::modeCreate - 새 파일을 만듭니다. 지정된 파일이 존재하는 경우 해당 내용이 지워지고 파일 길이가 0으로 설정됩니다.
  • CFile::modeNoTruncate - 이 파일은 CFile::modeCreate 파일과 함께 사용하기 위한 것입니다. 기존 파일이 생성되면 해당 내용은 삭제되지 않습니다.

  • CFile::모드Rea d - 파일이 읽기 전용으로 열립니다.
  • CFile::modeReadWrite - 파일이 쓰기 및 읽기용으로 열립니다.
  • CFile::modeWrite - 파일이 쓰기 전용으로 열립니다.
  • CFile::typeText - 텍스트 모드에서 파일 작업을 위해 CStdioFile과 같은 CFile 클래스에서 파생된 클래스에서 사용됩니다. 텍스트 모드는 캐리지 리턴 문자와 줄 바꿈 문자의 조합을 변환합니다.
  • CFile::Binary - CStdioFile과 같은 CFile 클래스에서 파생된 클래스에서 이진 모드의 파일 작업에 사용됩니다.
  • 클래스 객체에 대한 포인터인 선택적 매개변수 pError CFileException, 파일에 대한 작업을 수행하면 오류가 발생할 경우에만 사용됩니다. 이 경우 pError가 가리키는 개체에 추가 정보가 기록됩니다.

    방법 열려 있는파일이 열려 있으면 0이 아닌 값을 반환하고 오류가 발생하면 0을 반환합니다. 예를 들어 존재하지 않는 파일을 읽도록 Open 메서드를 지정한 경우 파일을 열 때 오류가 발생할 수 있습니다.

    파일 ID 열기

    CFile 클래스에는 UINT 유형의 데이터 요소 m_hFile이 포함되어 있습니다. 열린 파일의 식별자를 저장합니다. CFile 클래스의 개체가 이미 생성되었지만 파일이 아직 열리지 않은 경우 hFileNull 상수가 m_hFile 변수에 기록됩니다.

    일반적으로 열린 파일 식별자는 직접 사용되지 않습니다. 수업 방법 C파일파일에 대해 거의 모든 작업을 수행할 수 있으며 파일 식별자를 지정할 필요가 없습니다. m_hFile은 클래스 요소이므로 해당 메서드 구현 시 항상 자유롭게 액세스할 수 있습니다.

    파일 닫기

    파일 작업을 마친 후에는 파일을 닫아야 합니다. 수업 C파일이를 위한 특별한 Close 메서드가 있습니다. 주의할 점은 CFile 클래스의 객체를 생성하고 파일을 연 후 해당 객체를 삭제하면 소멸자를 이용해 연관된 파일이 자동으로 닫히게 된다는 점이다.

    파일 읽기 및 쓰기

    파일에 액세스하는 데는 여러 가지 클래스 메서드가 있습니다. C파일: 읽기, ReadHuge, 쓰기, WriteHuge, 플러시. 행동 양식 읽고 또 읽으세요거대한이전에 열린 파일에서 데이터를 읽도록 설계되었습니다. 32비트 운영 체제에서는 두 방법 모두 파일에서 65535바이트 이상을 동시에 읽을 수 있습니다. ReadHuge 사양은 더 이상 사용되지 않는 것으로 간주되며 16비트 운영 체제와의 호환성을 위해서만 유지됩니다.

    파일에서 읽은 데이터는 lpBuf 버퍼에 기록됩니다. nCount 매개변수는 파일에서 읽을 바이트 수를 지정합니다. 실제로 nCount 매개변수에서 요청한 것보다 파일에서 더 적은 바이트를 읽을 수 있습니다. 이는 읽는 동안 파일 끝에 도달한 경우 발생합니다. 이 메서드는 파일에서 읽은 바이트 수를 반환합니다.

    Write 및 WriteHuge 메서드는 파일에 쓰기 위한 것입니다. 32비트 운영 체제에서는 두 방법 모두 파일에 65535바이트 이상을 동시에 쓸 수 있습니다. 메소드는 lpBuf 버퍼의 바이트를 열린 파일 nCount에 씁니다. 디스크 가득 참과 같은 쓰기 오류가 발생하면 메소드는 예외 처리를 호출합니다.

    플러시 방법

    Write 또는 WriteHuge 메서드를 사용하여 디스크에 데이터를 쓰는 경우 해당 데이터가 한동안 임시 버퍼에 남아 있을 수 있습니다. 디스크의 파일에 필요한 변경이 이루어졌는지 확인하려면 Flush 메서드를 사용해야 합니다.

    파일 작업

    클래스에는 복사, 이름 바꾸기, 삭제, 속성 변경 등 파일에 대한 다양한 작업을 수행할 수 있는 메서드가 포함되어 있습니다.

    파일 이름을 변경하기 위해 CFile 클래스에는 정적 메서드가 포함되어 있습니다. 이름 바꾸기, 이 명령의 기능을 수행합니다. 이 메서드는 디렉터리 이름을 바꾸는 데 사용할 수 없습니다. 오류가 발생하면 메서드에서 예외가 발생합니다.

    CFile 클래스에는 파일을 삭제하는 정적 메서드가 포함되어 있습니다. 제거하다, 지정된 파일을 삭제할 수 있습니다. 이 방법을 사용하면 디렉터리를 삭제할 수 없습니다. 파일을 삭제할 수 없으면 메서드에서 예외가 발생합니다.

    파일 생성 날짜 및 시간, 길이 및 속성을 결정하기 위해 정적 메서드가 사용됩니다. 상태 가져오기. 메서드에는 두 가지 종류가 있습니다. 첫 번째는 가상 메서드로 정의되고 두 번째는 정적 메서드로 정의됩니다.

    메소드의 가상 버전 상태 가져오기이 CFile 클래스 객체와 관련된 열린 파일의 상태를 결정합니다. 이 메서드는 CFile 클래스 개체가 생성되고 파일이 열릴 때만 호출됩니다.

    메소드의 정적 버전 상태 가져오기CFile 클래스의 개체와 연결되지 않은 파일의 특성을 확인할 수 있습니다. 이 방법을 사용하기 위해 먼저 파일을 열 필요는 없습니다.

    잠그다

    클래스에는 메소드가 포함되어 있습니다. 잠금 범위그리고 잠금해제범위, 다른 프로세스에서 액세스할 수 없도록 하나 이상의 파일 데이터 조각을 잠글 수 있습니다. 애플리케이션이 이전에 이 애플리케이션이나 다른 애플리케이션에 의해 잠긴 데이터를 다시 잠그려고 시도하면 예외가 발생합니다. 잠금은 여러 응용 프로그램이나 프로세스가 서로 간섭하지 않고 동일한 파일에 대해 동시에 작업할 수 있도록 하는 메커니즘 중 하나입니다.

    다음 메소드를 사용하여 잠금을 설정할 수 있습니다. 잠금 범위. 설치된 잠금 장치를 제거하려면 다음 방법을 사용해야 합니다.잠금해제범위. 하나의 파일에 여러 개의 잠금이 설정된 경우 각 잠금은 별도의 메서드 호출을 통해 해제되어야 합니다.잠금해제범위.

    포지셔닝

    현재 파일 위치 포인터를 새 위치로 이동하려면 다음 클래스 메서드 중 하나를 사용할 수 있습니다. C파일 - 탐색, SeekToBegin, SeekToEnd.수업에 C파일파일 길이를 설정하고 변경할 수 있는 방법도 포함되어 있습니다.GetLength, SetLength.

    파일을 열 때 현재 파일 위치 표시는 파일의 맨 처음에 위치합니다. 데이터 조각을 읽거나 쓸 때 현재 위치 포인터는 파일 끝으로 이동하고 파일에 대한 다음 읽기 또는 쓰기 작업에서 읽거나 쓸 데이터를 가리킵니다.

    현재 파일 위치 포인터를 임의의 위치로 이동하려면 범용 방법을 사용할 수 있습니다

    구하다. 시작, 끝 또는 현재 포인터 위치를 기준으로 특정 바이트 수만큼 포인터를 이동할 수 있습니다.

    포인터를 파일의 시작이나 끝으로 이동하려면 특별한 방법을 사용하는 것이 가장 편리합니다. 방법

    SeekToBegin포인터를 파일의 시작 부분으로 이동하고 메소드끝으로 찾기- 끝까지.

    그러나 열린 파일의 길이를 결정하기 위해 포인터를 이동할 필요는 없습니다. 당신은 방법을 사용할 수 있습니다

    길이 가져오기. 이 메소드는 열린 파일의 길이도 바이트 단위로 반환합니다. 방법길이 설정열려 있는 파일의 길이를 변경할 수 있습니다. 이 방법으로 파일 크기가 늘어나면 마지막 바이트 값은 정의되지 않습니다.

    현재 파일 포인터 위치는 다음 메서드를 사용하여 확인할 수 있습니다.

    위치 가져오기. 메소드로 반환됨위치 가져오기32비트 값은 파일 시작 부분의 포인터 오프셋을 지정합니다.

    열린 파일의 특징

    디스크에서 열린 파일의 위치를 ​​확인하려면 메소드를 호출해야 합니다. 파일 경로 가져오기. 이 메소드는 클래스의 객체를 반환합니다.CString, 여기에는 드라이브 이름, 디렉터리, 파일 이름, 파일 확장자를 포함한 파일의 전체 경로가 포함됩니다.

    열려 있는 파일의 이름과 확장자만 확인해야 하는 경우 다음 방법을 사용할 수 있습니다. 파일 이름 가져오기. 파일 이름이 포함된 CString 개체를 반환합니다. 확장자 없이 열려 있는 파일의 이름만 알고 싶은 경우에는 다음 방법을 사용하세요.파일제목 가져오기.

    CFile 클래스의 다음 메서드를 사용하면 파일 경로를 설정할 수 있습니다. 이 메서드는 파일 이름을 생성, 복사 또는 변경하지 않고 CFile 클래스 개체의 해당 데이터 요소만 채웁니다.

    클래스 C

    메모리파일

    MFC 라이브러리에는 클래스가 포함되어 있습니다.

    CMem파일, 기본 클래스에서 상속됨C파일. 수업 CMem파일RAM에 있는 파일을 나타냅니다. 클래스 객체 사용CMem파일클래스 객체와 동일C파일. 차이점은 개체와 연결된 파일이CMem파일는 디스크가 아닌 컴퓨터의 RAM에 있습니다. 이로 인해 이러한 파일을 사용한 작업은 일반 파일을 사용한 작업보다 훨씬 빠릅니다.

    클래스 객체 작업

    CMem파일, 클래스의 거의 모든 메소드를 사용할 수 있습니다C파일위에서 설명한 것입니다. 해당 파일에 데이터를 쓰거나 읽을 수 있습니다. 이러한 메서드 외에도 클래스에는 다음이 포함됩니다.CMem파일추가 방법이 포함되어 있습니다.

    CMemFile 클래스의 개체를 생성하기 위한 두 가지 생성자가 있습니다. 첫 번째 CMemFile 생성자에는 선택적 매개 변수 nGrowBytes가 하나만 있습니다.

    CMemFile(UINT nGrowBytes=1024);

    이 생성자는 RAM에 빈 파일을 생성합니다. 일단 생성되면 파일이 자동으로 열립니다. (Ope 메소드를 호출할 필요가 없습니다.)

    N).

    이러한 파일에 쓰기가 시작되면 메모리 블록이 자동으로 할당됩니다. 메모리 클래스 메서드를 얻으려면

    CMem파일표준 함수 호출malloc, realloc그리고 무료. 할당된 메모리 블록이 충분하지 않으면 크기가 늘어납니다. 파일의 메모리 블록은 nGrowBytes 바이트의 일부로 증가합니다. 클래스 객체를 삭제한 후CMem파일사용한 메모리는 자동으로 시스템에 반환됩니다.

    CMemFile 클래스의 두 번째 생성자는 더 복잡한 프로토타입을 가지고 있습니다. 이 생성자는 프로그래머가 직접 파일에 메모리를 할당하는 경우에 사용됩니다.

    CMemFile(BYTE* lpBuffer, UINT nBufferSize, UINT nGrowBytes=0);

    lpBuffer 매개변수는 파일에 사용될 버퍼를 지정합니다. 버퍼 크기는 nBufferSize 매개변수에 의해 결정됩니다.

    선택적 nGrowBytes 매개변수는 첫 번째 클래스 생성자보다 더 포괄적으로 사용됩니다. nGrowBytes에 0이 포함되어 있으면 생성된 파일에는 lpBuffer의 데이터가 포함됩니다. 이러한 파일의 길이는 nBufferSize와 같습니다.

    nGrowBytes가 0보다 크면 lpBuffer의 내용이 무시됩니다. 또한 할당된 버퍼에 들어갈 수 있는 것보다 더 많은 데이터가 해당 파일에 기록되면 크기가 자동으로 늘어납니다. 파일의 메모리 블록은 nGrowBytes 바이트의 일부로 증가합니다.

    CMem파일파일이 사용하는 메모리 영역에 대한 포인터를 얻을 수 있습니다. 이 포인터를 통해 클래스 메소드에 국한되지 않고 파일 내용으로 직접 작업할 수 있습니다.C파일. 파일 버퍼에 대한 포인터를 얻으려면 Detach 메서드를 사용할 수 있습니다. 이 작업을 수행하기 전에 메소드를 호출하여 파일 길이(따라서 메모리 버퍼 크기)를 결정하는 것이 유용합니다.길이 가져오기. 분리하다주어진 파일을 닫고 사용 중인 메모리 블록에 대한 포인터를 반환합니다. 파일을 다시 열고 RAM 블록을 파일과 연결해야 하는 경우 메서드를 호출해야 합니다.붙이다.

    파일 버퍼를 관리하려면 클래스가

    CMem파일표준 함수 호출malloc, realloc그리고 무료. 따라서 메모리 관리 메커니즘을 중단하지 않으려면 다음 함수를 통해 lpBuffer 버퍼를 생성해야 합니다.malloc또는 콜록.

    CStdioFile 클래스

    C, C++ 표준 라이브러리의 스트림 I/O 함수를 사용하는 데 익숙한 사람들은 이 클래스에 주목해야 합니다.

    CStdio파일, 기본 클래스에서 상속됨C파일. 이 클래스를 사용하면 텍스트 및 바이너리 모드에서 버퍼링된 I/O를 수행할 수 있습니다. 클래스 객체의 경우CStdio파일CFile 클래스의 거의 모든 메서드를 호출할 수 있습니다.CStdio파일열린 파일에 대한 포인터를 포함하는 m_pStream 데이터 요소를 포함합니다. 클래스 객체인 경우CStdio파일생성되었지만 파일이 아직 열리거나 닫히지 않은 경우 m_pStream에 NULL 상수가 포함됩니다.CStdio파일세 가지 다른 생성자가 있습니다. CStdioFile 클래스의 첫 번째 생성자에는 매개 변수가 없습니다. 이 생성자는 클래스 객체만 생성하고 파일은 열지 않습니다. 파일을 열려면 메소드를 호출해야 합니다.열려 있는기본 클래스C파일.

    두 번째 클래스 생성자

    CStdio파일파일이 이미 열려 있고 CStdioFile 클래스의 새 개체를 만들고 열린 파일을 연결해야 하는 경우 호출될 수 있습니다. 이 생성자는 파일이 표준 함수로 열린 경우 사용할 수 있습니다.fopen. 메소드 매개변수에는 표준 함수를 호출하여 얻은 파일에 대한 포인터가 포함되어야 합니다.fopen.

    클래스 객체를 생성해야 하는 경우 세 번째 생성자를 사용할 수 있습니다.

    CStdio파일, 새 파일을 열고 새로 생성된 개체와 연결합니다.

    텍스트 파일을 읽고 쓰기 위해 CStdioFile 클래스에는 두 가지 새로운 메서드가 포함되어 있습니다.

    ReadString그리고 WriteString. 첫 번째 방법을 사용하면 파일에서 문자열을 읽을 수 있고, 두 번째 방법을 사용하면 이를 쓸 수 있습니다.

    파일 쓰기 및 읽기의 예

    다음은 표준 파일 선택 대화 상자 패널의 사용과 파일 읽기 및 쓰기 절차를 보여주는 코드 조각입니다.

    파일 열기 및 읽기

    CString m_Text; …… // 표준 파일 선택 패널 생성 열기 CFileDialog DlgOpen(TRUE,(LPCSTR)"txt",NULL, OFN_HIDEREADONLY,(LPCSTR)" 텍스트 파일(*.txt) |*.txt||"); // 표준 파일 선택 패널을 표시합니다. 열기 if(DlgOpen.DoModal()==IDOK) ( // 객체를 생성하고 읽기 위해 파일을 엽니다. CStdioFile File(DlgOpen.GetPathName(),CFile::modeRead|CFile::typeBinary); // 파일에서 문자열 읽기 CString& ref=m_Text; File.ReadString(ref ); // 문자열에 대한 참조가 전달됩니다. m_텍스트)

    파일 열기 및 쓰기

    CString m_Text; …… // 표준 SaveAs 파일 선택 패널 생성 CFileDialog DlgSaveAs(FALSE,(LPCSTR)"txt",NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, (LPCSTR)" 텍스트 파일(*.txt) |*.txt||"); // 표준 SaveAs 파일 선택 패널을 표시합니다. if(DlgSaveAs.DoModal()==IDOK) ( // 객체를 생성하고 쓰기 위해 파일을 엽니다. CStdioFile File(DlgSaveAs.GetPathName(), CFile::modeCreate|CFile::modeWrite|CFile::typeBinary); // 문자열 파일에 쓰기 File.WriteString((LPCTSTR)m_Text); )
      MFC에서 콘솔 응용 프로그램으로 단순성을 위해 설계된 프로그램의 작업 코드가 포함되어 있습니다. 프로그램이 작동하려면 다음을 수행하는 것을 잊지 마십시오.

      프로그램 실행 - 모두 빌드/다시 빌드(오류가 있음), 빌드/활성 구성 설정 선택 - Win 32 Realise, "프로젝트" 메뉴 항목을 선택한 다음 "설정...", "C/C++" 탭, 카테고리 - 코드 생성 및 "런타임 라이브러리 사용" 항목에서 "멀티스레드"를 선택합니다. 그런 다음 Build / Rebuild all을 다시 수행하면 프로그램이 작동합니다.



    질문이 있으신가요?

    오타 신고

    편집자에게 전송될 텍스트: