read fail: sharing violation
Dear Experts,
I am writing a program to backup some in used file. No matter I used
"shareDenyWrite"/"shareDenyRead"/"shareDenyNone", the using file can't be
copy.
(if using native copy, it will prompt "sharing violation" error).
How can I read/backup such files with vc? (no need to care integrity, just
want to capture a snap.
Million thanks.
-AL
=====Attached what I programmed for your reference.
#include <afx.h>
#include <afxwin.h>
#include <iostream>
using namespace std;
CWinApp theApp;
int main(int argc, char *argv[])
{
if (!AfxWinInit(GetModuleHandle(NULL), NULL, GetCommandLine(), 0))
{
cout << "panic: MFC couldn't initialize!" << endl;
return 1;
}
// constructing these file objects doesn't open them
CFile sourceFile;
CFile destFile;
// see that we have a reasonable number of arguments
if (argc != 3)
{
cout << "usage: " << argv[0];
cout << " <source> <dest>" << endl;
cout << endl;
return 1;
}
// we'll use a CFileException object to get error information
CFileException ex;
// open the source file for reading
if (!sourceFile.Open(argv[1],
CFile::modeRead | CFile::shareDenyWrite, &ex))
{
// complain if an error happened
// no need to delete the ex object
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
cout << "Couldn't open source file: ";
cout << szError;
return 1;
}
else
{
if (!destFile.Open(argv[2], CFile::modeWrite |
CFile::shareExclusive | CFile::modeCreate, &ex))
{
TCHAR szError[1024];
ex.GetErrorMessage(szError, 1024);
cout << "Couldn't open source file: ";
cout << szError;
sourceFile.Close();
return 1;
}
BYTE buffer[4096];
DWORD dwRead;
// Read in 4096-byte blocks,
// remember how many bytes were actually read,
// and try to write that many out. This loop ends
// when there are no more bytes to read.
do
{
dwRead = sourceFile.Read(buffer, 4096);
destFile.Write(buffer, dwRead);
}
while (dwRead > 0);
// Close both files
destFile.Close();
sourceFile.Close();
}
return 0;
}