16,471
社区成员
发帖
与我相关
我的任务
分享
#include "stdafx.h"
using namespace std;
struct {
UINT type; LPCSTR name;
} DriveTypeFlags [] = {// GetDriveType返回码与人可读字符串对照表
{DRIVE_UNKNOWN ,"未知" },
{DRIVE_NO_ROOT_DIR ,"无效路经" },
{DRIVE_REMOVABLE ,"可移动" },
{DRIVE_FIXED ,"固定" },
{DRIVE_REMOTE ,"网络驱动器" },
{DRIVE_CDROM ,"CD-ROM" },
{DRIVE_RAMDISK ,"随机存取磁盘"},
{0 , NULL },
};
int _tmain() {
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) {
cerr << _T("Fatal Error: MFC initialization failed") << endl;
return -1;
}
// 获取逻辑驱动器字符串- a:\<null>b:\<null>c:\<null>...z:\<null><null>
// 还可以用GetLogicalDrives以位图形式代替字符串形式获取信息
TCHAR buf[200];
DWORD len = GetLogicalDriveStrings(sizeof(buf)/sizeof(TCHAR),buf);
string msg = "逻辑驱动器:\n";
for (TCHAR* s=buf; *s; s+=_tcslen(s)+1) {
LPCTSTR sDrivePath = s;
msg += sDrivePath;
msg += " ";
UINT uDriveType = GetDriveType(sDrivePath);
for (int i=0; DriveTypeFlags[i].name; i++) {
if (uDriveType == DriveTypeFlags[i].type) {
msg += DriveTypeFlags[i].name;
break;//
}
}
msg += '\n';
}
cout << msg.c_str();
return 0;
}
void find(LPCTSTR lpPath,vector<FileInfo>& FileList)
{
string szFind(lpPath);
WIN32_FIND_DATA FindFileData;
szFind+=_T("\\*.*");
HANDLE hFind=::FindFirstFile(szFind.c_str(),&FindFileData);
if(INVALID_HANDLE_VALUE==hFind) return;
//
do
{
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{// dir
if(FindFileData.cFileName[0] != '.')
{
string szPath(lpPath);
szPath+=_T("\\");
szPath+=FindFileData.cFileName;
//TRACE1("%s\n",szPath.c_str());
find(szPath.c_str(),FileList);
}
}
else
{// file
string strFileName=FindFileData.cFileName;//文件名
//TRACE1("%s\n",strFileName.c_str());
int at = strFileName.find_last_of('.');
if(at<0) continue;// file without extention
string ext=strFileName.substr(at);
//TRACE1("%s\n",ext.c_str());
//
at=0;// reset
while(((int)at=suffixStr.find(ext,at))>=0)// find type
// if(stricmp(suffixStr.c_str(),_T(".txt"))==0)
{// not suffixStr.c_str()==_T(".txt") ; never == !
//afxDump << at << "\n";
at+=ext.size();// move to seperetor '.'
if(suffixStr[at] != '.') continue;// not wanted !
//
FILETIME ft=FindFileData.ftCreationTime;
SYSTEMTIME st={0};
TCHAR buf[64]={0};
FileTimeToLocalFileTime(&(FindFileData.ftCreationTime),&ft);
FileTimeToSystemTime(&ft,&st);
sprintf(buf,_T("%4d年%02d月%02d日%02d:%02d:%02d"),
st.wYear,st.wMonth,st.wDay,st.wHour/*北京时间*/,st.wMinute,st.wSecond);
string strFilePath=lpPath;
FileInfo fi;
fi.szFileName=strFileName;
fi.szFilePath=strFilePath;
fi.szCreateTime=buf;
//TRACE1("%s\n",strFileName.c_str());
FileList.push_back(fi);
}
}
} while (::FindNextFile (hFind, &FindFileData));
}