反正我电脑上测试是没有问题的,我的这份代码实现的是将所有插入电脑上的U盘上面的资料,全部备份到D盘。
#include<windows.h>
#include<bits\stdc++.h>
using namespace std;
int num[1000],i=1;
string GetUDiskRoot()
{
string UDiskRoot = "";
UINT DiskType;
DWORD szAllDriveStr = GetLogicalDriveStringsA(0, NULL);
char *pDriveStr = new char[szAllDriveStr + sizeof(" ")];
char *pForDelete = pDriveStr;
GetLogicalDriveStringsA(szAllDriveStr, pDriveStr);
DWORD szDriveStr = strlen(pDriveStr);
while (szDriveStr > 0)
{
DiskType = GetDriveTypeA(pDriveStr);
switch (DiskType)
{
case DRIVE_NO_ROOT_DIR:
break;
case DRIVE_REMOVABLE:
// 移动存储设备
UDiskRoot = pDriveStr;
break;
case DRIVE_FIXED:
// 固定硬盘驱动器
break;
case DRIVE_REMOTE:
// 网络驱动器
break;
case DRIVE_CDROM:
// 光盘驱动器
break;
}
pDriveStr += szDriveStr + 1;
szDriveStr = strlen(pDriveStr);
}
delete[] pForDelete;
return UDiskRoot;
}
DWORD GetPartitionVolumeSerialNumber();
int main()
{
ifstream read;
read.open("daily.txt",ios::in);
while(read>>num[i])
i++;
while(1)
{
ofstream out;
out.open("daily.txt",ios::app);
long long x=GetPartitionVolumeSerialNumber();
char a[]="xcopy ";
string s=GetUDiskRoot();
int t=i-1;
bool flag=1;
while(t>0)
{
if(num[t]==x)
{
flag=0;
break;
}
}
if(!flag)
continue;
num[i]=x;
i++;
out<<x<<endl;
const char* b;
b=s.data();
char c[]="\\ D:\\usb\\%date:~0,4%%date:~5,2%%date:~8,2% /S/E/I";
system(strcat(strcat(a,b),c));
Sleep(3000);
}
return 0;
}
DWORD GetPartitionVolumeSerialNumber()
{
TCHAR lpRootPathName[]= "E:\\";
TCHAR lpVolumeNameBuffer[ 12 ];
DWORD nVolumeNameSize =12;
DWORD VolumeSerialNumber;
DWORD MaximumComponentLength;
TCHAR lpFileSystemNameBuffer[ 10 ];
DWORD nFileSystemNameSize = 10;
DWORD FileSystemFlags;
BOOL ret = GetVolumeInformation( lpRootPathName, // _T("C:\\")
lpVolumeNameBuffer,
nVolumeNameSize,
&VolumeSerialNumber,
&MaximumComponentLength,
&FileSystemFlags,
lpFileSystemNameBuffer,
nFileSystemNameSize);
if( ret )
return VolumeSerialNumber;
else
return 0;
}