LockFile사용방법에 대해 질문을 올렸던 peritus입니다
당연히 알수 있다고 생각해서인지 답변을 주시지않아 다시
부탁드립니다. 저는 다음의 Help에 있는 내용이 어렵습니다
BOOL LockFile(
HANDLE hFile, // handle of file to lock
DWORD dwFileOffsetLow, // low-order word of lock region offset
DWORD dwFileOffsetHigh, // high-order word of lock region offset
DWORD nNumberOfBytesToLockLow, // low-order word of length to lock
DWORD nNumberOfBytesToLockHigh // high-order word of length to lock
);
2-4번째에 있는 인자에 무엇을 써야하는지 해석을 못하겠어요
Low와 High의 차이가 무엇인지 분간을 못하겠어요
또 OpenFile후에 LockFile을 써야하는지
OpenFile전에 써야하는지도 궁금합니다,
WriteFile,LockFile을 포함한 간단한 example을 부탁드립니다 꼭이요
이 API함수가 아니더라도 다른 방법으로 Lock을 걸어 파일에 데이타를
쓸수 있는 길이 있으면 가르쳐주시면 좋겠습니다
LockFile은 파일핸들가지고 작업을 하니까 반드시 파일을 열어야 사용할 수 있습니다...
첨의 두개인자는 파일락을 시작할 파일내에서의 오프셋값입니다. 그 오프셋의 하위DWORD값과 상위 DWORD값을 넣어주시면 되구요... 두번째는 그 위치부터 몇바이트를 락할지를 결정하는 값의 하위와 상위값을 넣어주시면 됩니다.
대부분의 경우 상위값은 0을넣어주시면 되겠죠.. 2기가이상의 크기를 가진 파일을 가질때는 상위값에 0이 아닌숫자가 들어갈수도 있겠지만... 그런 파일이 있을려나... 쩝~~
Word값을 예로 들면 하위 바이트와 상위바이트 2개의 바이트로 되어있죠..
Word = $22FF ===> 하위 바이트 $FF, 상위바이트 $22
DWORD값은 하위 워드와 상위워드 2개의 워드로 구성되어 있구요...
DWORD = $11223344 ===> 하위 워드 $3344, 상위 워드 $1122
아래는 LockFile을 이용해서 한파일에 다른 파일을 추가하는 예제입니다...
LockFile을 사용하신뒤에 반드시 UnlockFile을 해서 락을 제거하는거 잊지마시길...
var
hFile: THandle;
hAppend: THandle;
dwBytesRead, dwBytesWritten, dwPos: DWORD;
Buff: array[0..4095] of Char;
begin
// Open the existing file.
hFile := CreateFile('ONE.TXT', // open ONE.TXT
GENERIC_READ, // open for reading
0, // do not share
nil, // no security
OPEN_EXISTING, // existing file only
FILE_ATTRIBUTE_NORMAL, // normal file
0); // no attr. template
if (hFile = INVALID_HANDLE_VALUE) then
ShowMessage('Could not open ONE.'); // process error
// Open the existing file, or if the file does not exist,
// create a new file.
hAppend := CreateFile('TWO.TXT', // open TWO.TXT
GENERIC_WRITE, // open for writing
0, // do not share
nil, // no security
OPEN_ALWAYS, // open or create
FILE_ATTRIBUTE_NORMAL, // normal file
0); // no attr. template
if (hAppend = INVALID_HANDLE_VALUE) then
ShowMessage('Could not open TWO.'); // process error
// Append the first file to the end of the second file.
// Lock the second file to prevent another process from
// accessing it while writing to it. Unlock the
// file when writing is finished.
repeat
if ReadFile(hFile, buff, 4096, dwBytesRead, nil) then
begin
dwPos := SetFilePointer(hAppend, 0, nil, FILE_END);
LockFile(hAppend, dwPos, 0, dwPos + dwBytesRead, 0);
WriteFile(hAppend, buff, dwBytesRead, dwBytesWritten, nil);
UnlockFile(hAppend, dwPos, 0, dwPos + dwBytesRead, 0);
end;
until (dwBytesRead <> 4096);
// Close both files.
CloseHandle(hFile);
CloseHandle(hAppend);
end;
^^ 항상 즐코하세요.
peritus wrote:
>
> LockFile사용방법에 대해 질문을 올렸던 peritus입니다
> 당연히 알수 있다고 생각해서인지 답변을 주시지않아 다시
> 부탁드립니다. 저는 다음의 Help에 있는 내용이 어렵습니다
>
> BOOL LockFile(
> HANDLE hFile, // handle of file to lock
> DWORD dwFileOffsetLow, // low-order word of lock region offset
> DWORD dwFileOffsetHigh, // high-order word of lock region offset
> DWORD nNumberOfBytesToLockLow, // low-order word of length to lock
> DWORD nNumberOfBytesToLockHigh // high-order word of length to lock
> );
> 2-4번째에 있는 인자에 무엇을 써야하는지 해석을 못하겠어요
> Low와 High의 차이가 무엇인지 분간을 못하겠어요
> 또 OpenFile후에 LockFile을 써야하는지
> OpenFile전에 써야하는지도 궁금합니다,
> WriteFile,LockFile을 포함한 간단한 example을 부탁드립니다 꼭이요
> 이 API함수가 아니더라도 다른 방법으로 Lock을 걸어 파일에 데이타를
> 쓸수 있는 길이 있으면 가르쳐주시면 좋겠습니다
>