Q&A

  • 답이없어서 다시 올립니다(LockFile사용법)


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을 걸어 파일에 데이타를

쓸수 있는 길이 있으면 가르쳐주시면 좋겠습니다



1  COMMENTS
  • Profile
    최용일 2001.02.17 09:00
    안녕하세요. 최용일입니다.



    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을 걸어 파일에 데이타를

    > 쓸수 있는 길이 있으면 가르쳐주시면 좋겠습니다

    >