优盘检测Word下载.docx
《优盘检测Word下载.docx》由会员分享,可在线阅读,更多相关《优盘检测Word下载.docx(10页珍藏版)》请在冰豆网上搜索。
szDrive=(PCHAR)szLogicalDriveStrings;
//指向字符数组
inti=0;
//循环每个卷
do
if(!
GetDirverInfo(szDrive))//检测硬盘
//printf("
\n获取错误:
%d"
GetLastError());
cout<
<
endl;
}
szDrive+=(lstrlen(szDrive)+1);
i++;
}while(*szDrive!
='
\x00'
);
printf("
\n"
szDrive);
//获取错误的编号
if(i==5)
"
未检测到U盘的插入,请插入U盘"
BOOLGetDirverInfo(LPSTRszDrive)
UINTuDriveType;
DWORDdwVolumeSerialNumber;
DWORDdwMaximumComponentLength;
DWORDdwFileSystemFlags;
CHARszFileSystemNameBuffer[BUFSIZE];
CHARszDirveName[MAX_PATH];
if(strcmp(szDrive,"
H:
\\"
)==0)
\n%s\n"
//输出盘的名字
GetDiskFreeSpaceEx(szDrive,&
FreeBytesAvailable,&
TotalNumberOfBytes,&
TotalNunberOfreeBytes);
可用的容量大小:
(FreeBytesAvailable.HighPart*pow(2,32)+FreeBytesAvailable.LowPart)/pow(2,30)<
G"
//输出可用容量大小
总容量的大小:
(TotalNumberOfBytes.HighPart*pow(2,32)+TotalNumberOfBytes.LowPart)/pow(2,30)<
//输出总容量大小
剩余容量的大小:
(TotalNunberOfreeBytes.HighPart*pow(2,32)+TotalNunberOfreeBytes.LowPart)/pow(2,30)<
//输出剩余容量大小
uDriveType=GetDriveType(szDrive);
//TCHAR的指针类型
G:
)==0)//复制您想要复制的文件
char*filepath="
c:
\\VMware.txt"
;
charc[20];
_finddata_tfile;
intk;
longHANDLE;
endl<
检测到U盘的插入,可以开始复制文件"
chara[20],b[20];
LOOP:
请输入原目标文件的路径:
比如将c盘下的Yang.txt文件复制到u盘"
那么输入:
\\Yang.txt"
那么输入:
u:
\\?
?
.txt"
(其中?
?
是你给该文件的取的名字,一定要加扩展名)"
//其中?
时你给该文件的取的名字
cin>
>
a;
filepath=a;
k=HANDLE=_findfirst(a,&
file);
if(k!
=-1)//检测文件是否存在
存在该文件,并且该文件的名字为:
<
file.name<
endl;
k=_findnext(HANDLE,&
else
不存在该文件,请检测该文件是否存在或复制其他文件"
gotoLOOP;
_findclose(HANDLE);
FILE*file1=fopen(filepath,"
r"
if(file1)//查询所要复制文件的大小
doublesize=filelength(fileno(file1));
if(size<
1024)
该文件的大小为:
size<
字节"
if(size>
=1024&
&
size<
1048576)
size/1024<
KB"
{if(size>
=1048576&
1073741824)
size/1048576<
MB"
size/1073741824<
}
(请对比文件的大小和U盘可用容量大小,然后再考虑是否复制文件)"
fclose(file1);
请输入指定目录的路径:
b;
CopyFile(a,b,false);
//将c盘目录下的VMware.txt复制到u盘目录下。
//DeleteFile(a);
//删除原路径目标文件
k=HANDLE=_findfirst(b,&
=-1)//检测是否复制成功
已经完成了复制,而且该文件的名字为:
复制失败,请重新复制:
GetVolumeInformation(
szDrive,
szDirveName,
MAX_PATH,
dwVolumeSerialNumber,
dwMaximumComponentLength,
dwFileSystemFlags,
szFileSystemNameBuffer,
BUFSIZE
))
returnFALSE;
if(0!
=lstrlen(szDirveName)&
strcmp(szDrive,"
)==0)//输出盘的别名
Drivenameis%s\n"
szDirveName);
returnTRUE;
//若将其注释掉,则只显示C盘的信息
intmain(intargc,char*argv[])
intDiskCount=0;
DWORDDiskInfo=GetLogicalDrives();
//利用GetLogicalDrives()函数可以获取系统中逻辑驱动器的数量,函数返回的是一个32位无符号整型数据。
while(DiskInfo)//通过循环操作查看每一位数据是否为1,如果为1则磁盘为真,如果为0则磁盘不存在。
{
if(DiskInfo&
1)//通过位运算的逻辑与操作,判断是否为1
++DiskCount;
DiskInfo=DiskInfo>
1;
//通过位运算的右移操作保证每循环一次所检查的位置向右移动一位。
//DiskInfo=DiskInfo/2;
cout<
逻辑磁盘数量:
DiskCount<
intDSLength=GetLogicalDriveStrings(0,NULL);
//通过GetLogicalDriveStrings()函数获取所有驱动器字符串信息长度。
char*DStr=newchar[DSLength];
//用获取的长度在堆区创建一个c风格的字符串数组
GetLogicalDriveStrings(DSLength,(LPTSTR)DStr);
//通过GetLogicalDriveStrings将字符串信息复制到堆区数组中,其中保存了所有驱动器的信息。
intDType;
intsi=0;
BOOLfResult;
signed_int64i64FreeBytesToCaller;
signed_int64i64TotalBytes;
signed_int64i64FreeBytes;
for(inti=0;
i<
DSLength/4;
++i)
//为了显示每个驱动器的状态,则通过循环输出实现,由于DStr内部保存的数据是A:
\NULLB:
\NULLC:
\NULL,这样的信息,所以DSLength/4可以获得具体大循环范围
chardir[3]={DStr[si],'
:
'
'
\\'
};
dir;
DType=GetDriveType(DStr+i*4);
//GetDriveType函数,可以获取驱动器类型,参数为驱动器的根目录
if(DType==DRIVE_FIXED)
硬盘"
elseif(DType==DRIVE_CDROM)
光驱"
elseif(DType==DRIVE_REMOVABLE)
可移动式磁盘"
elseif(DType==DRIVE_REMOTE)
网络磁盘"
elseif(DType==DRIVE_RAMDISK)
虚拟RAM磁盘"
elseif(DType==DRIVE_UNKNOWN)
未知设备"
fResult=GetDiskFreeSpaceEx(
dir,
(PULARGE_INTEGER)&
i64FreeBytesToCaller,
i64TotalBytes,
i64FreeBytes);
//GetDiskFreeSpaceEx函数,可以获取驱动器磁盘的空间状态,函数返回的是个BOOL类型数据
if(fResult)//通过返回的BOOL数据判断驱动器是否在工作状态
totalspace:
(float)i64TotalBytes/1024/1024<
MB"
//磁盘总容量
freespace:
(float)i64FreeBytesToCaller/1024/1024<
//磁盘剩余空间
else
设备未准备好"
si+=4;
}
getdiskfreespace();
return0;
使用说明:
程序会显示您的电脑上所有的磁盘数量,包括硬盘,光驱,可移动式磁盘,未知设备。
插入您的优盘,会显示您的优盘的可用的容量大小,总容量大小和剩余容量大小,还可以显示您的d盘的可用的容量大小,总容量大小和剩余容量大小。
当您插入优盘后,程序会检测到您的优盘已经插入,可以开始复制文件。
运行结果有一个举例,您可以根据例子,进行您想要的输入。
输入路径后,程序会判断文件是否存在,若存在,根据您的文件大小,您可以选择复制,输入您想要复制到的路径地方。
会判断您是否成功复制,若没有,重新复制。
设计和实验说明:
根据C++,运用GetDriveTypeW,GetDiskFreeSpaceEx,CopyFile,GetFileSize等函数,GetDriveTypeW获得磁盘数量和类型,驱动器类型,GetDiskFreeSpaceEx获取可用容量的大小,总容量大小和剩余量大小,CopyFile进行文件的复制,复制指定为一个新文件GetFileSize获得文件的大小。
总结:
学习了API,通过这次练习,了解了操作系统的文件系统的一些功能和应用,文件系统应用程序开发接口是系统提供的最重要,最基本的API集合之一,看了相关书籍,看到设计用户界面,很美观新颖,这次没有完成这个,会再接再厉学习。