簡體   English   中英

LockFileEx之后可以復制文件嗎?

[英]Can I CopyFile after LockFileEx it?

因此,鎖定后我正在嘗試復制文件! 但是我得到了GetLastError()= 32-“該進程無法訪問該文件,因為該文件正在被另一個進程使用。”

按順序,是因為文件先被鎖定,所以使用該文件的過程相同。 我正在使用多進程應用程序,並且使用LockFileEx排除其他進程處理相等的文件信息。 此外,我一直在閱讀LockFileEx文檔,並且在鎖定文件后未找到與無法復制文件相關的內容。

HANDLE cfile;
bool alreadyExistFile = FALSE;
OVERLAPPED sOverlapped;
sOverlapped.Offset = 1;
sOverlapped.OffsetHigh = 0;

cfile = CreateFile(TEXT("CounterSeedAssincrono.csv.csv"),
         GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_ALWAYS, 0, NULL);

LockFileEx(cfile, LOCKFILE_EXCLUSIVE_LOCK |
         LOCKFILE_FAIL_IMMEDIATELY, 0, 10000, 0, &sOverlapped);

CopyFile(TEXT("CounterSeedAssincrono.csv"),
     TEXT("CounterSeedAssincrono_A.csv"), alreadyExistFile);

if (alreadyExistFile == FALSE)
    cout << "CopyFile Failed -> " << GetLastError() << endl;

UnlockFileEx(cfile, 0, 10000, 0, &sOverlapped);

CloseHandle(cfile);

有人知道我可以做些什么嗎? 我正在使用Windows和VS 2015。

您調用CreateFile傳遞0作為dwShareMode標志,因此將阻止對其的所有讀寫訪問,直到關閉此文件句柄為止。 而且LockFileEx並不是真正必要的。

PS cfile未初始化,您的意思是cfile = CreateFile(...嗎?另外, GetLastError必須在調用失敗后立即調用,否則返回的值可能會被更改,並且您根本不會檢查LockFileEx和其他方法的結果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM