本文目录一览:
请问如何用c语言实现遍历查找磁盘下的exe文件? 我是在VC6.0平台下
调用DOS 命令 dir 就可以了。
如果只要显示文件名,加 选项 /B
如果要显示所有子文件夹里的文件名, 加 选项 /S
例如 DIR C:\*.exe /B /S
如果要把显示 转向到文件 DIR C:\*.exe /B /S abc.lis
DOS 命令 可以用 sprintf 做成,用 system() 让它执行。
程序如下:
#include stdio.h
#include stdlib.h
main(){
char cmd[80];
char d;
for (d='C';d='Z';d++) // 对 磁盘号 C: D: E: .....Z: 循环
{
sprintf(cmd,"DIR %c:\\*.exe /B",d); // 命令
// printf("%s\n",cmd); // 检查 命令字符串 是否正确
system(cmd); // 执行
}
return 0;
}
用c语言编写在硬盘上搜索指定文件的程序
以前曾经写过这样一个非图形界面的C程序。现在找出来供参考。说明:
1. 文件大小, 只输出了低4字节, 也就是说大于4G的文件其大小显然是不对的. 因为我没有大于4G的文件, 所以未修改.
2. 没有排序功能.
用法:
1. 拷贝下来保存成 FFile.c
2. 用32位编译器(如GCC, VC)编译成控制台程序。我用GCC编译成FFile.exe才4K大小。
3. 在命令提示符窗口下输入命令:
FFile -文件名
例如:
FFile -a*.c 所有硬盘下a*.c; 注意文件名前要加横线.
在我的机器上运行结果为:
F:\MyCodeffile -a*.c
2000.12.16 07:07:42 1601 Bytes, File=G:\MYPROJ\TryDBF\Misc\ADDDBF.C
1998.12.14 21:13:28 13626 Bytes, File=G:\MYPROJ\TRY\AUTOMAIL.C
2000.12.15 12:58:42 1585 Bytes, File=G:\MYPROJ\TRY\dbf\adddbf.c
2000.11.21 13:32:52 1922 Bytes, File=G:\MYPROJ\TRY\Prv\analod.c
--- Found 4 file(s) match with G:\a*.c.
2005.11.01 15:57:52 692 Bytes, File=H:\work\AllSwf.c
2005.09.15 11:00:54 817 Bytes, File=H:\work\ifon\AskMac.c
--- Found 2 file(s) match with H:\a*.c.
源程序如下:
#include stdio.h
/************************************************************************
2005.08.25 Created to find file in all hard disks.
***********************************************************************/
#include windows.h
static int count = 0;
static char * GetFileTimeString(FILETIME *pt)
{
static char szFileTime[24];
SYSTEMTIME st;
FILETIME lt;
FileTimeToLocalFileTime(pt, lt);
FileTimeToSystemTime(lt, st);
sprintf(szFileTime, "%04d.%02d.%02d %02d:%02d:%02d",
st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
return szFileTime;
}
static void doThisFile(WIN32_FIND_DATA *pfd, char *path)
{
printf("%s %10u Bytes, File=%s\\%s\n", // 0xffffffff = 4294967295
GetFileTimeString((pfd-ftLastWriteTime)), pfd-nFileSizeLow, path, pfd-cFileName);
++count;
}
static void FindFiles(char *path, char *fname)
{
WIN32_FIND_DATA fd;
HANDLE handle;
char fp[256], subpath[256];
sprintf(fp, "%s\\%s", path, fname);
handle = FindFirstFile(fp, fd);
if (handle != INVALID_HANDLE_VALUE) {
if (!(fd.dwFileAttributes FILE_ATTRIBUTE_DIRECTORY)) {
doThisFile(fd, path);
}
while (FindNextFile(handle, fd)) {
if (!(fd.dwFileAttributes FILE_ATTRIBUTE_DIRECTORY)) {
doThisFile(fd, path);
}
}
FindClose(handle);
}
//**** Find All subdirectories .......................
sprintf(fp, "%s\\*.*", path);
handle = FindFirstFile(fp, fd);
if (handle != INVALID_HANDLE_VALUE) {
if (fd.dwFileAttributes FILE_ATTRIBUTE_DIRECTORY) {
if (fd.cFileName[0]!='.') {
sprintf(subpath, "%s\\%s", path, fd.cFileName);
FindFiles(subpath, fname);
}
}
while (FindNextFile(handle, fd)) {
if (fd.cFileName[0]=='.') continue;
if (fd.dwFileAttributes FILE_ATTRIBUTE_DIRECTORY) {
sprintf(subpath, "%s\\%s", path, fd.cFileName);
FindFiles(subpath, fname);
}
}
FindClose(handle);
}
return;
}
static void DoPath(char *path, char *pattern)
{
count = 0;
FindFiles(path, pattern);
if (count) printf("--- Found %d file(s) match with %s\\%s.\n", count, path, pattern);
}
int main(int argc, char *argv[])
{
int i;
BYTE *cp, pattern[20], tbuf[240];
if (argc==1 || *argv[1]!='-') printf("Usage: FFile -Filepattern\n");
else {
strcpy(pattern, ++argv[1]);
GetLogicalDriveStrings(240, tbuf);
for (cp=tbuf; *cp; cp+=4) {
*cp = 0x5f;
if (GetDriveType(cp)==3) {
cp[2] = '\0'; // C:\ = C:
DoPath(cp, pattern);
}
}
}
return 0;
}
C语言写一个遍历全盘搜索文件并返回文件路径的程序
通过windows的API,里面有两个文件操作的,可以找到第一个文件句柄和下一个文件句柄,用这个方法就可以使用递归的手法来遍历全盘,然后使用if判断,确定的话再用得到文件绝对路径的方法就可以了