Tom's Hardware > Forum > Windows 2000/NT > Windows 2000/NT General Discussion > Logical drive copying using CreateFile

Logical drive copying using CreateFile

Forum Windows 2000/NT : Windows 2000/NT General Discussion - Logical drive copying using CreateFile

Tom's Hardware: Over 1.4 million members in 6 different countries available to answer all your high-tech questions. Sign up now! Its free!
Word :    Username :           
 

Archived from groups: microsoft.public.win2000.general (More info?)

 

Hi,

In the following code i am copying the contents of logical drive F to G
and then after that, from G to H.

After the program execution completes, the contents of the drives g and
h are not updated in windows explorer, even after pressing F5.

If I executed chkdsk on G and H drives the content sync up with that of F.
This problem is reproducable on NTFS but is not there on FAT32 partitions.

Please suggest the reason and a possible solution to fix this problem.

I have tried this program on 400 MB drives but the problem is reproducable
on any sizes.

Thanks in Anticipation.

---------------------------------------------------------------------------
#define _WIN32_WINNT 0x0500
#include<windows.h>
#include<iostream.h>
#include<conio.h>

void main()
{
char buffer[1024];
unsigned long bytesread;

HANDLE
h=INVALID_HANDLE_VALUE,h2=INVALID_HANDLE_VALUE,h3=INVALID_HANDLE_VALUE;
h = CreateFile(
"\\\\.\\f:", // file name
GENERIC_READ, // access mode
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, // SD
OPEN_EXISTING, // how to create
0, // file attributes
NULL // handle to template file
);

if(h==INVALID_HANDLE_VALUE)
{
cout<<"first open failed"<<GetLastError()<<endl;
getch();
exit(1);
}
else
{
cout<<"first open successful"<<endl;
}
h2 = CreateFile(
"\\\\.\\g:", // file name
GENERIC_READ|GENERIC_WRITE, // access mode
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, // SD
OPEN_EXISTING, // how to create
FILE_FLAG_WRITE_THROUGH, // file attributes
FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING
NULL // handle to template file
);

if(h2==INVALID_HANDLE_VALUE)
{
cout<<"second open failed"<<endl;
getch();
exit(1);
}
else
{
cout<<"second open successful"<<endl;
}

while(ReadFile(h,&buffer,sizeof(buffer),&bytesread,NULL) && bytesread)
WriteFile(h2,buffer,bytesread,&bytesread,NULL);

FlushFileBuffers(h2);

CloseHandle(h);
CloseHandle(h2);

h2=INVALID_HANDLE_VALUE;

cout<<"First write done"<<endl;

h2 = CreateFile(
"\\\\.\\g:", // file name
GENERIC_READ, // access mode
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, // SD
OPEN_EXISTING, // how to create
0, // file attributes
FILE_FLAG_WRITE_THROUGH,
NULL // handle to template file
);

if(h2==INVALID_HANDLE_VALUE)
{
cout<<"second open failed"<<endl;
getch();
exit(1);
}
else
{
cout<<"second open successful"<<endl;
}

h3 = CreateFile(
"\\\\.\\h:", // file name
GENERIC_WRITE, // access mode
FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
NULL, // SD
OPEN_EXISTING, // how to create
FILE_FLAG_WRITE_THROUGH, // file attributes
FILE_FLAG_WRITE_THROUGH ,
NULL // handle to template file
);

if(h3==INVALID_HANDLE_VALUE)
{
cout<<"third open failed"<<endl;
getch();
exit(1);
}
else
{
cout<<"third open successful"<<endl;
}

while(ReadFile(h2,&buffer,sizeof(buffer),&bytesread,NULL) &&
bytesread)
WriteFile(h3,buffer,bytesread,&bytesread,NULL);

FlushFileBuffers(h3);

CloseHandle(h2);
CloseHandle(h3);
}

------------------------------------------------------------------------------

Sponsored Links
Register or log in to remove.

Archived from groups: microsoft.public.win2000.general (More info?)

 

I recommend that you either use a single-line batch
file for this task, or repost in a C++ newsgroup.


"Software Engineer" <SoftwareEngineer@discussions.microsoft.com> wrote in
message news:0EEAFFA9-612B-432D-A07A-EAD4DF9785F9@microsoft.com...
> Hi,
>
> In the following code i am copying the contents of logical drive F to G
> and then after that, from G to H.
>
> After the program execution completes, the contents of the drives g and
> h are not updated in windows explorer, even after pressing F5.
>
> If I executed chkdsk on G and H drives the content sync up with that of F.
> This problem is reproducable on NTFS but is not there on FAT32 partitions.
>
> Please suggest the reason and a possible solution to fix this problem.
>
> I have tried this program on 400 MB drives but the problem is reproducable
> on any sizes.
>
> Thanks in Anticipation.
>
> --------------------------------------------------------------------------
-
> #define _WIN32_WINNT 0x0500
> #include<windows.h>
> #include<iostream.h>
> #include<conio.h>
>
> void main()
> {
> char buffer[1024];
> unsigned long bytesread;
>
> HANDLE
> h=INVALID_HANDLE_VALUE,h2=INVALID_HANDLE_VALUE,h3=INVALID_HANDLE_VALUE;
> h = CreateFile(
> "\\\\.\\f:", // file name
> GENERIC_READ, // access mode
> FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
> NULL, // SD
> OPEN_EXISTING, // how to create
> 0, // file attributes
> NULL // handle to template file
> );
>
> if(h==INVALID_HANDLE_VALUE)
> {
> cout<<"first open failed"<<GetLastError()<<endl;
> getch();
> exit(1);
> }
> else
> {
> cout<<"first open successful"<<endl;
> }
> h2 = CreateFile(
> "\\\\.\\g:", // file name
> GENERIC_READ|GENERIC_WRITE, // access mode
> FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
> NULL, // SD
> OPEN_EXISTING, // how to create
> FILE_FLAG_WRITE_THROUGH, // file attributes
> FILE_FLAG_WRITE_THROUGH | FILE_FLAG_NO_BUFFERING
> NULL // handle to template file
> );
>
> if(h2==INVALID_HANDLE_VALUE)
> {
> cout<<"second open failed"<<endl;
> getch();
> exit(1);
> }
> else
> {
> cout<<"second open successful"<<endl;
> }
>
> while(ReadFile(h,&buffer,sizeof(buffer),&bytesread,NULL) &&
bytesread)
> WriteFile(h2,buffer,bytesread,&bytesread,NULL);
>
> FlushFileBuffers(h2);
>
> CloseHandle(h);
> CloseHandle(h2);
>
> h2=INVALID_HANDLE_VALUE;
>
> cout<<"First write done"<<endl;
>
> h2 = CreateFile(
> "\\\\.\\g:", // file name
> GENERIC_READ, // access mode
> FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
> NULL, // SD
> OPEN_EXISTING, // how to create
> 0, // file attributes
> FILE_FLAG_WRITE_THROUGH,
> NULL // handle to template file
> );
>
> if(h2==INVALID_HANDLE_VALUE)
> {
> cout<<"second open failed"<<endl;
> getch();
> exit(1);
> }
> else
> {
> cout<<"second open successful"<<endl;
> }
>
> h3 = CreateFile(
> "\\\\.\\h:", // file name
> GENERIC_WRITE, // access mode
> FILE_SHARE_READ | FILE_SHARE_WRITE, // share mode
> NULL, // SD
> OPEN_EXISTING, // how to create
> FILE_FLAG_WRITE_THROUGH, // file attributes
> FILE_FLAG_WRITE_THROUGH ,
> NULL // handle to template file
> );
>
> if(h3==INVALID_HANDLE_VALUE)
> {
> cout<<"third open failed"<<endl;
> getch();
> exit(1);
> }
> else
> {
> cout<<"third open successful"<<endl;
> }
>
> while(ReadFile(h2,&buffer,sizeof(buffer),&bytesread,NULL) &&
> bytesread)
> WriteFile(h3,buffer,bytesread,&bytesread,NULL);
>
> FlushFileBuffers(h3);
>
> CloseHandle(h2);
> CloseHandle(h3);
> }
>
> --------------------------------------------------------------------------
----

Reply to Anonymous
Tom's Hardware > Forum > Windows 2000/NT > Windows 2000/NT General Discussion > Logical drive copying using CreateFile
Go to:

There are 1136 identified and unidentified users. To see the list of identified users, Click here.

Please mind

You are about to answer a thread that has been inactive for more than 6 months.
If you still wish to proceed, please ensure that your posting is original and does not duplicate or overlap any prior responses to this thread.

Add a reply Cancel
Sponsored links
  • Ask the community now
  • Publish
Ad
They won a badge
Join us in greeting them