CreateFile, ReadFile, Write File 몇 개의 windowsAPI 함수
5042 단어 C
HANDLE CreateFile(LPCTSTR lpFileName, //
DWORD dwDesiredAccess, // ( / )
DWORD dwShareMode, //
LPSECURITY_ATTRIBUTES lpSecurityAttributes, //
DWORD dwCreationDisposition, //
DWORD dwFlagsAndAttributes, //
HANDLE hTemplateFile //
);
반환 값: HANDLE 형식 정의 \ # typedef void * HANDLE INVALIDHANDLE_VALUE 가 오 류 를 표시 하면 GetLastError () 의 값 을 설정 합 니 다. 작업 에 성공 하면 속성 CREATE 를 설정 합 니 다.ALWAYS 또는 OPENALWAYS 는 GetLastError () 값 을 ERROR 로 설정 합 니 다.ALWAYS_EXITS
매개 변수 목록 설명: 1. LPCTSTR lpFileName 파일 이름 2. DWORD dwDesiredAccess 설정 접근 방식 은 다음 과 같 습 니 다: GENERICWRITE 는 GENERIC 만 씁 니 다.READ 는 값 이 0 이면 장치 속성 만 얻 을 수 있 고 읽 기와 쓰기 가 불가능 함 을 나 타 냅 니 다.
3. DWORD dwShareMode, / / 공유 모드 0 은 파일 을 공유 하지 않 음 FILESHARE_READ 파일 열기 후 읽 기 권한 만 FILESHARE_WRITE 파일 열기 후 쓰기 권한 만 FILESHARE_DELETE 파일 열기 후 삭제 권한 만 있 음
4.LPSECURITY_ATTRIBUTES lpSecurity Attributes, / / 보안 속성 을 가리 키 는 지침
5. DWORD dwCreationDisposition, / / CREATE 를 만 드 는 방법새 파일 만 들 기;파일 이 존재 하면 오류 발생 CREATEALWAYS 에서 파일 을 만 들 고 이전 파일 을 바 꿉 니 다 OPENEXISTING 파일 이 이미 존재 해 야 합 니 다.장치 요구 OPENALWAYS 파일 이 존재 하지 않 으 면 생 성 TRUNCATEEXISTING 은 기 존 파일 을 0 길이 로 줄 였 습 니 다.
6. DWORD dwFlagsAndAttributes, / / 파일 속성 은 보통 기본 속성 FILE 을 사용 합 니 다.ATTRIBUTE_NORMAL FILE_ATTRIBUTE_ARCHIVE 태그 압축 파일 속성 FILEATTRIBUTE_COMPRESSED 는 파일 을 압축 된 것 으로 표시 하거나 디 렉 터 리 에 있 는 파일 의 기본 압축 방식 으로 표시 합 니 다 FILEATTRIBUTE_NORMAL 기본 속성 FILEATTRIBUTE_HIDDEN 파일 이나 디 렉 터 리 숨 기기 FILEATTRIBUTE_READOnlY 파일 은 FILE 만 읽 기ATTRIBUTE_SYSTEM 파일 은 시스템 파일 FILEFLAG_WRITE_THROUGH 운영 체 제 는 파일 에 대한 쓰기 동작 을 연기 할 수 없습니다 FILEFLAG_OVERLAPPED 파일 중첩 작업 허용 FILEFLAG_NO_BUFFERING 은 파일 버퍼 처 리 를 금지 합 니 다.파일 은 디스크 볼 륨 의 섹 터 블록 에 만 쓸 수 있 습 니 다 FILEFLAG_RANDOM_ACCESS 는 무 작위 접근 을 위 한 파일 버퍼 최적화 FILEFLAG_SEQUENTIAL_SCAN 연속 접근 에 대한 파일 버퍼 최적화 FILEFLAG_DELETE_ON_마지막 으로 열 린 핸들 을 닫 고 파일 을 삭제 합 니 다.임시 파일 에 특히 적합 합 니 다.
7. HANDLE hTemplateFile / / 파일 핸들 hTemplateFile 을 파일 이나 장치 핸들 로 복사 하 는 데 사 용 됩 니 다. 이 매개 변수 에 따라 제 시 된 핸들 을 템 플 릿 으로 파일 을 만 드 는 것 을 표시 합 니 다.이 파일 의 속성 을 새로 만 든 파일 로 확장 합 니 다. 이 인 자 는 새 파일 의 속성 을 기 존 파일 과 같이 설정 하 는 데 사용 할 수 있 으 며, dwAttrsAndFlags 를 무시 합 니 다.보통 이 매개 변 수 는 NULL 로 설정 되 어 있 으 며, 비어 있 으 면 템 플 릿 을 사용 하지 않 고 비어 있 음 을 표시 합 니 다.내 가 이해 하 는 것 은 파일 의 속성 을 복사 하 는 것 이다. hTemplateFile 의 핸들 파일 속성 으로 파일 을 여 는 속성 을 설정 하 는 것 이다.
Create File 에 대응 하 는 것 은 closehandle 입 니 다.
BOOL CloseHandle(HANDLE hObject);
반환 값: 0 값 이 아 닌 실행 을 성공 적 으로 되 돌려 주 는 데 실 패 했 습 니 다. 0 값 매개 변 수 는 handle 하나 뿐 입 니 다. CreateFile 은 핸들 을 되 돌려 줍 니 다. 그러면 CloseHandle 은 이 핸들 을 닫 습 니 다.
ReadFile 원형
BOOL ReadFile(
HANDLE hFile, //
LPVOID lpBuffer, //
DWORD nNumberOfBytesToRead, //
LPDWORD lpNumberOfBytesRead, //
LPOVERLAPPED lpOverlapped
// FILE_FLAG_OVERLAPPED, , 。
// 。 , NULL
);
사용 설명: 반환 값, 호출 성공, 비 0 값 호출 실패, 0 반환
매개 변수 설명: 1. HANDLE hFile 은 CreateFile 을 받 아서 발생 하 는 핸들 을 조작 해 야 하 는 문제 입 니 다. 적어도 이 핸들 은 GENERIC 가 있 습 니 다.READ 접근 속성 권한 2. LPVOID ipBuffer, 데 이 터 를 받 는 버퍼 3. LPDWORD ipNumberOfBytes Read, 읽 기 성공 한 문자 수, 포인터 4. LPOVERLAPPED ipOverlapped 파일 이 FILE 이면FLAG_OVERLAPPED 방식 으로 열 면 이 포인 터 는 중첩 동작 을 가리 키 고 있 습 니 다.
WriteFile 원형
BOOL WriteFile(
HANDLE hFile,//
LPCVOID lpBuffer,//
DWORD nNumberOfBytesToWrite,//
LPDWORD lpNumberOfBytesWritten,//
LPOVERLAPPED lpOverlapped//OVERLAPPED
);
반환 값: 호출 에 성 공 했 습 니 다. 0 값 이 아 닌 호출 에 실 패 했 습 니 다. 0 값 매개 변 수 를 되 돌려 줍 니 다. 설명: 1. HANDLE hFile 은 Create File 을 받 아서 발생 하 는 핸들 을 조작 해 야 하 는 문제 입 니 다. 적어도 이 핸들 은 GENERIC 가 있 습 니 다.READ 접근 속성 권한 2. LPVOID ipBuffer, 데 이 터 를 기록 할 버퍼 3. LPDWORD ipNumberOfBytes Read, 성공 적 인 문자 수 를 기록 합 니 다. 포인터 4. LPOVERLAPPED ipOverlapped 파일 이 FILE 이면FLAG_OVERLAPPED 방식 으로 열 면 이 포인 터 는 중첩 동작 을 가리 키 고 있 습 니 다.
#include
#include
#define BUF_SIZE 256
int main(int argc,LPTSTR argv[])
{
HANDLE hIn,hOut;
DWORD size_in,size_out;
CHAR buffer[BUF_SIZE];
if(3 != argc)
{
printf(" :%s filename1 filename2",argv[0]);
return 1;
}
hIn = CreateFile(argv[1],
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hIn == INVALID_HANDLE_VALUE)
{
printf(" 。 :%d
",GetLastError());
return 1;
}
hOut = CreateFile(argv[2],
GENERIC_WRITE,
0,
NULL,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
if(hOut == INVALID_HANDLE_VALUE)
{
printf(" 。 :%d
",GetLastError());
return 2;
}
while(ReadFile(hIn,buffer,BUF_SIZE,&size_in,NULL) && size_in)
{
WriteFile(hOut,buffer,size_in,&size_out,NULL);
if(size_in != size_out)
{
printf(" !
:%d
",GetLastError());
return 3;
}
}
CloseHandle(hIn);
CloseHandle(hOut);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Visual Studio에서 파일 폴더 구분 (포함 경로 설정)Visual Studio에서 c, cpp, h, hpp 파일을 폴더로 나누고 싶었습니까? 어쩌면 대부분의 사람들이 있다고 생각합니다. 처음에 파일이 만들어지는 장소는 프로젝트 파일 등과 같은 장소에 있기 때문에 파일...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.