我可以在LockFileEx之后复制文件吗?

时间:2017-10-16 14:43:25

标签: c++ file winapi multiprocessing

所以,我试图锁定它后复制文件!但是我得到了GetLastError()= 32 - “进程无法访问该文件,因为它正被另一个进程使用。”

按顺序,使用该文件的进程是否相同,因为它先被锁定。我正在使用多进程应用程序并使用LockFileEx排除其他进程处理相等的文件信息。此外,我一直在阅读LockFileEx文档,并且在锁定后没有找到与CopyFile不可能相关的内容。

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。

1 个答案:

答案 0 :(得分:1)

您将CreateFile作为dwShareMode标志传递0,因此阻止对该文件句柄的所有读写访问权限。 LockFileEx并非真正必要。

PS cfile未初始化,您的意思是cfile = CreateFile(...吗?调用失败后也必须立即调用GetLastError,否则返回的值可能会被更改。并且您根本不检查LockFileEx的结果和其他方法。