如何用c++实现删除某文件夹(包含子文件夹)中某一指定扩展名的所有文件

进化中 2013-06-29 10:48:57
小弟最近在做一项目,之前遇到删除文件的问题都是自己动手删的。项目完成后想自己动手写一个小代码来实现此功能:
#include <windows.h>
#include <io.h>
#include <stdio.h>

const char *to_research = "D:\\B2\\*.obj"; //欲查找的文件;

int main()
{
long handle; //用于查找的句柄;
struct _finddata_t fileinfo; //存储文件信息的结构体;
handle = _findfirst(to_research, &fileinfo); //第一次查找;
if (handle==-1)
{
return -1;
} //没有找到就返回-1;
printf("%s\n", fileinfo.name); //打印找到的文件的文件名;
while (!_findnext(handle, &fileinfo))
{
printf("%s\n", fileinfo.name);
}

_findclose(handle); //关闭句柄;
DeleteFile("D:\\B2\\B2_12G.obj");
}

但是现在不知道如何将查找到的文件名字传给DeleteFile的参数。请各位指教。
...全文
1025 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
我看你有戏 2013-07-02
  • 打赏
  • 举报
回复
引用 10 楼 lxitong 的回复:
楼上这个好像有点问题啊,为什么输入路径的时候没有结束符啊,比如你要输入“D:B2\\”,如何把它输送给VS2010呢
在vs2010上建立个控制台程序,直接把这代码复制进去就可以了
进化中 2013-07-01
  • 打赏
  • 举报
回复
楼上这个好像有点问题啊,为什么输入路径的时候没有结束符啊,比如你要输入“D:B2\\”,如何把它输送给VS2010呢
www_adintr_com 2013-06-30
  • 打赏
  • 举报
回复
char szPath[MAX_PATH]; sprintf(szPath, "%s%s", "D:\\B2\\", fileinfo.name); DeleteFile(szPath);
kxalpah 2013-06-30
  • 打赏
  • 举报
回复
四楼使用system函数,就是调用windows的命令行
kxalpah 2013-06-30
  • 打赏
  • 举报
回复 1
说一个与c++无关的方法,windows有del命令可以用来删除文件,如果要删除某一文件夹下的某一特定扩展名文件,比如txt,使用del path/*.txt命令就可以了,一个bat文件就能可以解决。
进化中 2013-06-30
  • 打赏
  • 举报
回复
楼上能说的明白点吗,我不太懂。我的意思是先找到扩展名为OBJ的文件,然后删除它。代码中我已完成找的任务,现在就是不知道如何将找到的文件名传给DeleteFile函数。另外您能详细地解释一下您说的这个函数吗?
赵4老师 2013-06-30
  • 打赏
  • 举报
回复
纠正上帖:
system("del /s /q c:\\*.bak");
赵4老师 2013-06-30
  • 打赏
  • 举报
回复
system("del /s /q c:\*.bak");
我看你有戏 2013-06-30
  • 打赏
  • 举报
回复

//获得指定目录下的所有文件的方法!   这个会有用,把文件的后缀名分析下,符合要求的delete
#include <iostream>
#include <windows.h>
#include <cstring>

using namespace std;


void ListFile(char* szDir)
{
	char  szTempDir[MAX_PATH+1];
	strcpy(szTempDir,szDir);
	strcat(szTempDir,"*");
	HANDLE  hFindFile;
	WIN32_FIND_DATA  FileData;
	
	hFindFile = FindFirstFile(szTempDir,&FileData);
	
	if( hFindFile == INVALID_HANDLE_VALUE )
	{
		return ;
	}
	else
	{
		do
		{
			
			if( (FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) 
				&& strcmp(FileData.cFileName,".")
				&& strcmp(FileData.cFileName,".."))
			{
				char szNewDir[MAX_PATH+1];
				strcpy(szNewDir,szDir);
				strcat(szNewDir,FileData.cFileName);
				strcat(szNewDir,"\\");
				ListFile(szNewDir);
			}
			else
			{
				cout<<szDir<<FileData.cFileName<<endl;
			}
		}
		while(FindNextFile(hFindFile,&FileData));
		
		FindClose(hFindFile);
	}
}





int main()
{
	char   szPath[MAX_PATH+1];
	while(cin>>szPath)
	{
		if(szPath[strlen(szPath)-1]!='\\')
			strcat(szPath,"\\");
		ListFile(szPath);
	}
	return 0;
}

cl781121002 2013-06-29
  • 打赏
  • 举报
回复
楼上已经写的很清楚了
进化中 2013-06-29
  • 打赏
  • 举报
回复
#include <windows.h>
#include <io.h>
#include <stdio.h>

const char *to_research = "D:\\B2\\*.obj";                          //欲查找的文件;

int main()
{
	long handle;                                                    //用于查找的句柄;
	struct _finddata_t fileinfo;                                    //存储文件信息的结构体;
	handle = _findfirst(to_research, &fileinfo);                    //第一次查找;
	if (handle==-1)
	{
		return -1;
	}                                                               //没有找到就返回-1;
	printf("%s\n", fileinfo.name);                                  //打印找到的文件的文件名;
	while (!_findnext(handle, &fileinfo))
	{
		printf("%s\n", fileinfo.name);
	}

	_findclose(handle);                                              //关闭句柄;   
	DeleteFile("D:\\B2\\B2_12G.obj");
}
本光盘是《计算机常用数值计算算法与程序 C++版》一书的配套光盘,盘包括了书所有的C++程序源代码文件,每个源程序文件文件扩展名都使用.cpp形式。这些C++程序已经在微软公司Windows平台下的Virsual C++ 6.0环境下通过。盘还包括由这些源程序在VC++6.0下生成的可执行文件(文件扩展名为.exe),以及由这些程序运行后产生的结果文件(文件扩展名为.dat)。另外,还包括若干类书所介绍算法的头文件,由文件扩展名为.h和.inl所组成。 为了方便读者实际应用书所介绍的算法程序,本光盘专门预创建了VC++6.0的工程,以每一章建立一个工程,一共有16个工程,对应着书的16章。全部工程包含在一个目录(文件)——NumComp下,该目录下一共有17个目录(文件),第一个到第十六个为每章所对应的工程文件,命名为ChapXX,XX表示01至16,如Chap05,表示为第五章的程序所建立了工程目录(文件),第17个目录(文件)名为include,其存放了本书算法程序需要的诸头文件。在前十六个目录(文件)除存放了各章所介绍的算法示例C++源程序文件,还包括几个VC++6.0工程所需要的文件,读者可以不用去动它们。在每一个ChapXX目录(文件)下,还有一个目录(文件):debug,该目录(文件)存放了ChapXX所对应的章所有算法C++源程序生成的可执行文件和这些程序运行后生成的结果数据文件。除止之外,还有几个是VC++6.0工程所生成的文件,读者可以不用去动它们。 在每一个ChapXX目录(文件)下,包括一个这样的文件:ChapX.dsw,X表示1至16这16个阿拉伯数字之一,对应于这X章的工程。当进入到某一这样的目录(文件),用鼠标双击该文件名,就可以启动VC++6.0程序,并调用了该工程,这是最方便的一种启动VC++6.0的方法之一,下面就可以进行对C++程序的编辑、编译、连接、运行等工作了。具体的操作步骤,可以参阅有关VC++6.0的使用操作手册,或技术手册。 如果读者要自己另外建立VC++6.0的工程及相应的目录(文件),可以参阅VC++6.0的使用操作手册,也可阅读《计算机常用数值计算算法与程序 C++版》一书的第一章“概论”的1.8节“Visual C++ 6.0的编译运行环境”,其有详细说明。 最后注意,在VC++ 6.0设置好路径,特别是include目录(文件)的路径,否则在编译时会出现找不到头文件的错误,使编译无法正常进行。具体的设置方法请参看本书第1章的相关内容。

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧