(tFile=="..")) continue;
if (FindFileData.dwFileAttributes==
FILE_ATTRIBUTE_DIRECTORY){
if (DirName[DirName.GetLength()-1]!='\\')
PreRemoveDirectory(DirName+'\\'+tFile);
else
PreRemoveDirectory(DirName+tFile);
if (!RemoveDirectory(tFile))
result=FALSE;
else
result=TRUE;
}
else
if (!DeleteFile(tFile)) result=FALSE;
else result=TRUE;
}
while (FindNextFile(hFindFile,&FindFileData));
FindClose(hFindFile);
}
else {
SetCurrentDirectory(lpBuffer);
return FALSE;
}
SetCurrentDirectory(lpBuffer); //回复到原来的目录下
return result;
}
如何得到并修改各驱动器的信息
---- 在设计和文件输入/ 输出有关的应用程序时,我们很可能在输入/ 输出文件
前,需要了解一下源驱动器或者目标驱动器的各项信息,比如是否有磁盘在软驱
中,它是否已打开写保护,以及现有磁盘的容量等。遗憾的是,MFC 类库中没有提供
支持这些功能的类,所以我们只能通过Win32 提供的函数来完成我们的要求。下
面,我根据自己的编程实践,通过几段程序,来说明如何利用Win32 提供的函数实
现对驱动器的操作。读者可以根据自己的需要,把介绍的函数稍加修改后,即可插
入到自己设计的应用程序中去。
下面程序的功能是搜索计算机中所有驱动器,选择出其中软盘驱动器的驱动
器号,依次加入到一个下拉列表框中。
void FindDriverInfo()
{
CComboBox* Driver=(CComboBox*)GetDlgItem(IDC_DRIVER);
DWORD dwNumBytesForDriveStrings;
HANDLE hHeap;
LPSTR lp;
CString strLogdrive;
int nNumDrives=0, nDriveNum;
dwNumBytesForDriveStrings=GetLogicalDriveStrings(0,NULL)
*sizeof(TCHAR);//实际存储驱动器号的字符串长度
if (dwNumBytesForDriveStrings!=0) {
hHeap=GetProcessHeap();
lp=(LPSTR)HeapAlloc(hHeap,HEAP_ZERO_MEMORY,
dwNumBytesForDriveStrings);//
GetLogicalDriveStrings(HeapSize(hHeap,0,lp),lp);
StringBox.SetSize(dwNumBytesForDriveStrings/sizeof(TCHAR)+1);
while (*lp!=0) {
if (GetDriveType(lp)==DRIVE_REMOVABLE){
Driver->AddString(lp);
StringBox[nNumDrives]=lp;
nNumDrives++;
}
lp=_tcschr(lp,0)+1;
}
}
else AfxMessageBox("Can't Use The Function GetLogicalDriveStrings!");
}
下面介绍的EmptyDiskSpace() 函数主要负责清空指定驱动器中的磁盘,同时
它还负责记录指定驱动器中磁盘的容量,并得到该磁盘的序列号。在该函数
中,还将调用第七部分提到的PreRemoveDirectory() 函数,来完成清空工作。
BOOL EmptyDiskSpace(CString Driver)
{
BOOL result=TRUE;
DWORDSectorsPerCluster; // address of sectors per cluster
DWORDBytesPerSector; // address of bytes per sector
DWORDNumberOfFreeClusters; // address of number of free clusters
DWORDTotalNumberOfClusters;
DWORDTotalBytes;
DWORDFreeBytes;
int bContinue=1;
char DiskVolumeSerialNumber[30];
//存储驱动器内当前磁盘的序列号
LPCTSTRlpRootPathName;
// address of root directory of the file system
LPTSTRlpVolumeNameBuffer=new char[12];
// address of name of the volume
DWORDnVolumeNameSize=12;
// length of lpVolumeNameBuffer
DWORD VolumeSerialNumber;
// address of volume serial number
DWORD MaximumComponentLength;
// address of system's maximum filename length
DWORD FileSystemFlags;
// address of file system flags
LPTSTRlpFileSystemNameBuffer=new char[10];
// address of name of file system
DWORDnFileSystemNameSize=10;
// length of lpFileSystemNameBuffer
lpRootPathName=Driver;
while (1){
if (GetDiskFreeSpace(Driver, &SectorsPerCluster,
&BytesPerSector, &NumberOfFreeClusters,
&TotalNumberOfClusters))
{//驱动器中有磁盘
TotalBytes=SectorsPerCluster*BytesPerSector
*TotalNumberOfClusters;//磁盘总容量
FreeBytes=SectorsPerCluster*BytesPerSector
*NumberOfFreeClusters;//磁盘空闲空间容量
GetVolumeInformation(lpRootPathName,
lpVolumeNameBuffer, nVolumeNameSize,
&VolumeSerialNumber,
&MaximumComponentLength,
&FileSystemFlags,
lpFileSystemNameBuffer, nFileSystemNameSize);
sprintf(DiskVolumeSerialNumber,"%X",VolumeSerialNumber);
//得到驱动器内当前磁盘的序列号
SetmTotalBytes(TotalBytes/1024);//存储指定驱动器中磁盘的容量
if (TotalBytes!=FreeBytes){//当磁盘总容量不等于空闲空间容量时,
应该执行清空操作
while (bContinue) {
if ((bContinue==2)(北联网教程,专业提供视频软件下载)
……