WriteFileとReadFile
5210 ワード
WriteFile関数:
この関数の機能は、同期および非同期操作を完了するために使用できるファイルにデータを書き込むことです.書き込み位置はファイルポインタによって作成された文字であり、書き込み操作が完了すると、ファイルのポインタはファイルが新たに追加されたバイトの最後に移動する(もちろん、ファイルが開く方法はFILE_FLAG_OVERLPPEDではない).
関数のプロトタイプ:
関数#カンスウ#
WriteFile
および
ReadFile
次のように宣言します.
WINBASEAPI
BOOL
WINAPI
WriteFile(
__in HANDLE hFile,
__in_bcount(nNumberOfBytesToWrite) LPCVOID lpBuffer,
__in DWORD nNumberOfBytesToWrite,
__out_opt LPDWORD lpNumberOfBytesWritten,
__inout_opt LPOVERLAPPED lpOverlapped
);
WINBASEAPI
BOOL
WINAPI
ReadFile(
__in HANDLE hFile,
__out_bcount_part(nNumberOfBytesToRead, *lpNumberOfBytesRead) LPVOID lpBuffer,
__in DWORD nNumberOfBytesToRead,
__out_opt LPDWORD lpNumberOfBytesRead,
__inout_opt LPOVERLAPPED lpOverlapped
);
hFile
ファイルハンドルです.
lpBuffer
読み取り/書き込みデータバッファです.
nNumberOfBytesToWrite
どのくらいのデータが書き込まれますか.
lpNumberOfBytesWritten
は、どのくらいのデータが書き込まれているかです.
nNumberOfBytesToRead
どれだけのデータを読み込むか.
nNumberOfBytesToRead
は、すでに読み込まれたデータの数です.
lpOverlapped
非同期読み書きの構造です.
呼び出し関数の例は次のとおりです.
#001 //
ファイルを作成、書き込み、読み込みします.
#002 //
蔡軍生
2007/10/21 QQ:9073204
深セン
#003 void CreateFileDemo(void)
#004 {
#005 //
#006 HANDLE hFile =::CreateFile(_T("CreateFileDemo.txt"), //
ファイルの名前を作成します.
#007 GENERIC_WRITE|GENERIC_READ, //
ファイルの書き込みと読み取り.
#008 0, //
読み書きを共有しません.
#009 NULL, //
デフォルトのセキュリティ属性.
#010 CREATE_ALWAYS, //
ファイルが存在する場合は、ファイルも作成されます.
#011 FILE_ATTRIBUTE_NORMAL,//
一般的なファイル.
#012 NULL); //
テンプレートファイルが空です.
#013
#014 if (hFile == INVALID_HANDLE_VALUE)
#015 {
#016 //
#017 OutputDebugString(_T("CreateFile fail!/r/n"));
#018 }
#019
#020 //
書類にデータを書く.
#021 const int BUFSIZE = 4096;
#022 char chBuffer[BUFSIZE];
#023 memcpy(chBuffer,"Test",4);
#024 DWORD dwWritenSize = 0;
#025 BOOL bRet =::WriteFile(hFile,chBuffer,4,&dwWritenSize,NULL);
#026 if (bRet)
#027 {
#028 //
#029 OutputDebugString(_T("WriteFile
ファイルの書き込みに成功しました
/r/n"));
#030 }
#031
#032 //
まず、書き込みファイルバッファのデータをディスクに強制的に書き込みます.
#033 FlushFileBuffers(hFile);
#034
#035 //
#036 //
ファイルからデータを読み込みます.
#037 LONG lDistance = 0;
#038 DWORD dwPtr = SetFilePointer(hFile, lDistance, NULL, FILE_BEGIN);
#039 if (dwPtr == INVALID_SET_FILE_POINTER)
#040 {
#041 //
エラーコードを取得します.
#042 DWORD dwError = GetLastError() ;
#043 //
処理エラー.
#044 }
#045
#046 DWORD dwReadSize = 0;
#047 bRet =::ReadFile(hFile,chBuffer,4,&dwReadSize,NULL);
#048 if (bRet)
#049 {
#050 //
#051 OutputDebugString(_T("ReadFile
ファイルの読み込みに成功しました
/r/n"));
#052 }
#053 else
#054 {
#055 //
エラーコードを取得します.
#056 DWORD dwError = GetLastError();
#057 //
処理エラー.
#058 TCHAR chErrorBuf[1024];
#059 wsprintf(chErrorBuf,_T("GetLastError()=%d/r/n"),dwError);
#060 OutputDebugString(chErrorBuf);
#061 }
#062
#063 }
この関数の機能は、同期および非同期操作を完了するために使用できるファイルにデータを書き込むことです.書き込み位置はファイルポインタによって作成された文字であり、書き込み操作が完了すると、ファイルのポインタはファイルが新たに追加されたバイトの最後に移動する(もちろん、ファイルが開く方法はFILE_FLAG_OVERLPPEDではない).
関数のプロトタイプ:
BOOL WriteFile( HANDLE hFile, // handle to file LPCVOID lpBuffer, // data buffer DWORDnNumberOfBytesToWrite, // number of bytes to write LPDWORD lpNumberOfBytesWritten, // number of bytes written LPOVERLAPPED lpOverlapped // overlapped buffer );
:
TRUE, FALSE。
:
hFile—— 。
lpBuffer—— , LPCVOID , , , “&” 。
nNumberOfBytesToWrite—— 。
lpNumberOfBytesWritten—— 。
lpOverlapped—— OVERLAPPED 。 NULL。
関数#カンスウ#
WriteFile
および
ReadFile
次のように宣言します.
WINBASEAPI
BOOL
WINAPI
WriteFile(
__in HANDLE hFile,
__in_bcount(nNumberOfBytesToWrite) LPCVOID lpBuffer,
__in DWORD nNumberOfBytesToWrite,
__out_opt LPDWORD lpNumberOfBytesWritten,
__inout_opt LPOVERLAPPED lpOverlapped
);
WINBASEAPI
BOOL
WINAPI
ReadFile(
__in HANDLE hFile,
__out_bcount_part(nNumberOfBytesToRead, *lpNumberOfBytesRead) LPVOID lpBuffer,
__in DWORD nNumberOfBytesToRead,
__out_opt LPDWORD lpNumberOfBytesRead,
__inout_opt LPOVERLAPPED lpOverlapped
);
hFile
ファイルハンドルです.
lpBuffer
読み取り/書き込みデータバッファです.
nNumberOfBytesToWrite
どのくらいのデータが書き込まれますか.
lpNumberOfBytesWritten
は、どのくらいのデータが書き込まれているかです.
nNumberOfBytesToRead
どれだけのデータを読み込むか.
nNumberOfBytesToRead
は、すでに読み込まれたデータの数です.
lpOverlapped
非同期読み書きの構造です.
呼び出し関数の例は次のとおりです.
#001 //
ファイルを作成、書き込み、読み込みします.
#002 //
蔡軍生
2007/10/21 QQ:9073204
深セン
#003 void CreateFileDemo(void)
#004 {
#005 //
#006 HANDLE hFile =::CreateFile(_T("CreateFileDemo.txt"), //
ファイルの名前を作成します.
#007 GENERIC_WRITE|GENERIC_READ, //
ファイルの書き込みと読み取り.
#008 0, //
読み書きを共有しません.
#009 NULL, //
デフォルトのセキュリティ属性.
#010 CREATE_ALWAYS, //
ファイルが存在する場合は、ファイルも作成されます.
#011 FILE_ATTRIBUTE_NORMAL,//
一般的なファイル.
#012 NULL); //
テンプレートファイルが空です.
#013
#014 if (hFile == INVALID_HANDLE_VALUE)
#015 {
#016 //
#017 OutputDebugString(_T("CreateFile fail!/r/n"));
#018 }
#019
#020 //
書類にデータを書く.
#021 const int BUFSIZE = 4096;
#022 char chBuffer[BUFSIZE];
#023 memcpy(chBuffer,"Test",4);
#024 DWORD dwWritenSize = 0;
#025 BOOL bRet =::WriteFile(hFile,chBuffer,4,&dwWritenSize,NULL);
#026 if (bRet)
#027 {
#028 //
#029 OutputDebugString(_T("WriteFile
ファイルの書き込みに成功しました
/r/n"));
#030 }
#031
#032 //
まず、書き込みファイルバッファのデータをディスクに強制的に書き込みます.
#033 FlushFileBuffers(hFile);
#034
#035 //
#036 //
ファイルからデータを読み込みます.
#037 LONG lDistance = 0;
#038 DWORD dwPtr = SetFilePointer(hFile, lDistance, NULL, FILE_BEGIN);
#039 if (dwPtr == INVALID_SET_FILE_POINTER)
#040 {
#041 //
エラーコードを取得します.
#042 DWORD dwError = GetLastError() ;
#043 //
処理エラー.
#044 }
#045
#046 DWORD dwReadSize = 0;
#047 bRet =::ReadFile(hFile,chBuffer,4,&dwReadSize,NULL);
#048 if (bRet)
#049 {
#050 //
#051 OutputDebugString(_T("ReadFile
ファイルの読み込みに成功しました
/r/n"));
#052 }
#053 else
#054 {
#055 //
エラーコードを取得します.
#056 DWORD dwError = GetLastError();
#057 //
処理エラー.
#058 TCHAR chErrorBuf[1024];
#059 wsprintf(chErrorBuf,_T("GetLastError()=%d/r/n"),dwError);
#060 OutputDebugString(chErrorBuf);
#061 }
#062
#063 }