问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

c++如何才能实现查询功能?

发布网友 发布时间:2023-02-05 16:33

我来回答

1个回答

热心网友 时间:2023-12-02 17:22

//下面是C++查找文件的源代码,我自己写的,已经通过编译和测试,如果楼主有不懂的地方,可以和我交流
//使用方法:用命令行输入。例如,程序名为Find.exe,则命令行为 Find *yourfile*
//查找支持通配符*,?

#define _WIN32_WINNT 0x0400

#include <iostream>
#include <stdlib.h>
using namespace std;

#ifdef UNICODE
#undef UNICODE
#endif

#include <windows.h>

BOOL MyFindFile(LPCSTR sFindPath, LPCSTR sFindFileName, ULONGLONG &uCountFolder, ULONGLONG &uCountFile)
{
char sPath[MAX_PATH];
char sFormatFileName[MAX_PATH+2] = "*";
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
BOOL fFinished = FALSE;

lstrcpy(sFormatFileName, sFindPath);
lstrcat(sFormatFileName, "\\*");
lstrcat(sFormatFileName, sFindFileName);
lstrcat(sFormatFileName, "*");

hFind = FindFirstFile(sFormatFileName, &FindFileData);

if (hFind == INVALID_HANDLE_VALUE)
{
return FALSE;
}
else
{
while (!fFinished)
{
lstrcpy(sPath, sFindPath);
lstrcat(sPath, "\\");
lstrcat(sPath, FindFileData.cFileName);

if (FILE_ATTRIBUTE_DIRECTORY & FindFileData.dwFileAttributes)
{
if (0 != lstrcmp(FindFileData.cFileName,".") && 0 != lstrcmp(FindFileData.cFileName,".."))
cout << " Folder " << ++uCountFolder << ". - " << sPath <<""<< endl;
}
else
cout << " File " << ++uCountFile << ". - " << sPath <<""<< endl;

if (!FindNextFile(hFind, &FindFileData))
{
if (GetLastError() == ERROR_NO_MORE_FILES)
{
fFinished = TRUE;
}
else
{
break;
}
}
}

FindClose(hFind);
}

return TRUE;
}

BOOL MyFindFolder(LPCSTR sPath, LPCSTR sFindFileName, ULONGLONG &uCountFolder, ULONGLONG &uCountFile)
{
char sTemp[MAX_PATH];
char sFormatFileName[MAX_PATH];
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
BOOL fFinished = FALSE;

MyFindFile(sPath, sFindFileName, uCountFolder, uCountFile);

lstrcpy(sFormatFileName, sPath);
lstrcat(sFormatFileName, "\\*");
hFind = FindFirstFile(sFormatFileName, &FindFileData);

if (hFind == INVALID_HANDLE_VALUE)
{
return FALSE;
}
else
{
while (!fFinished)
{
if (FILE_ATTRIBUTE_DIRECTORY & FindFileData.dwFileAttributes)
{
if (0 != lstrcmp(FindFileData.cFileName,".") && 0 != lstrcmp(FindFileData.cFileName,".."))
{
lstrcpy(sTemp, sPath);
lstrcat(sTemp, "\\");
lstrcat(sTemp, FindFileData.cFileName);
MyFindFolder(sTemp, sFindFileName, uCountFolder, uCountFile);
}
}

if (!FindNextFile(hFind, &FindFileData))
{
if (GetLastError() == ERROR_NO_MORE_FILES)
{
return TRUE;
}
else
{
return FALSE;
}
}
}

FindClose(hFind);
}

return TRUE;
}

void GetFileName(LPCSTR sFullPath, LPSTR sFilePath, LPSTR sFileName)
{
LPSTR p = (LPSTR)(sFullPath + lstrlen(sFullPath) - 1);
bool Flag(false);

while (p != sFullPath)
{
if ('\\' == *p || '/' == *p)
{
Flag = true;
break;
}
p--;
}

if (Flag)
{
lstrcpy(sFileName, p + 1);
lstrcpy(sFilePath, sFullPath);
sFilePath[p-sFullPath] = '\0';
}
else
{
lstrcpy(sFileName, sFullPath);
GetFullPathName(".", MAX_PATH, sFilePath, NULL);
}
}

ULONGLONG MyStartFind(LPCSTR sFindFileName)
{
char sPath[MAX_PATH];
char sFileName[MAX_PATH];
ULONGLONG uCountFolder(0);
ULONGLONG uCountFile(0);

GetFileName(sFindFileName, sPath, sFileName);
MyFindFolder(sPath, sFileName, uCountFolder, uCountFile);

if (uCountFolder + uCountFile)
{
cout << "------------------------------------------------------------"<< endl;
cout << "Total Folders:"<< uCountFolder << "" << endl;
cout << "Total Files: "<< uCountFile << "" << endl;
}
else
cout << "Couldn't Find File." << endl;

return uCountFolder + uCountFile;
}

int main(int argc, char *argv[])
{
char sFindFileName[MAX_PATH];

if (argc < 2)
{
cout << "Enter Find File Name:";
cin >> sFindFileName;
}
else
{
lstrcpy(sFindFileName, argv[1]);
}
MyStartFind(sFindFileName);

#ifdef _DEBUG
system("pause");
#else
if (argc < 2)
system("pause");
#endif

return (0);
}

/*Output:

C:\a>find a
File 1. - C:\a\a.mdb
File 2. - C:\a\a.txt
Folder 1. - C:\a\a1
File 3. - C:\a\a1\a1.mdb
File 4. - C:\a\a1\a1.txt
Folder 2. - C:\a\a1\a2
File 5. - C:\a\a1\a2\a2.mdb
File 6. - C:\a\a1\a2\a2.txt
--------------------------------
Total Folders:2
Total Files: 6

*/追问您用的是C吧

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
手机导航地图语音怎么下载 如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 求天津市塘沽周边野钓点(河钓海钓都可以) 被网络诈骗了老是要验证码,消费成功了吗 移动加盟店怎么要客户验证码是骗子吗 西瓜创客要验证码是不是骗子 电气安装接线图中fu代表什么? 小学英语怎么辅导孩子 ps4手柄连安卓手机如何变成标准hid 吃螃蟹之前能不能吃鱿鱼丝 9月16号去支付宝面的试,应聘的是BD实习生的职位,今天说要安排下时间复试... 玉器烧的坏吗 红色黑条海鱼叫什么 ...多少斤葵瓜子、多少斤西瓜子、多少斤花生才算是比较合适?_百度... 一小时可以磕多少西瓜子 清江浦区办理老年乘公交车卡60岁以办吗? 电话通话时是直流电还是交流电 上海东软载波电话打不通 一代天骄赵恒什么时候认祖归宗 一代天骄吴天明电子书txt全集下载 一代天骄的txt全集下载地址 安卓微信聊天记录被删除怎么找回 【各位大哥大姐帮帮我吧】右键搜索硬盘总是“系统找不到指定的设备... 请教如何在window7的任务管理器的应用程序栏里显示隐藏掉的应用程序... 南京小米擦玻璃神器维修地址 用语音控制擦玻璃真的假的 家用擦玻璃器十大排名 擦玻璃器的使用方法 擦玻璃神器使用教程 法定继承人的撤销权行使条件是什么? 财产继承能否撤销债权人放弃继承权 民法典规定继承人有撤销赠与权吗 债务人放弃继承权债权人可否行使撤销权呢 我想创业 有好点子 就是不知道哪里找投资人 买的二手抵押车丢了怎么办? 学信网上怎么查学历 为什么味道的 2012.10国庆,求江西南昌周边自驾游,给个地儿呗! 面试问为什么选择美团充电宝 投资美团充电宝怎么样 美团充电宝和东莞街电哪个好 鲁迅是哪里的人啊?