2010-01-28 226 views
6

有没有什么方法可以使用*(通配符)删除(使用remove())多个文件? 我有一组所有以索引开头的文件。例如:Index1.txt,Index-39.txt等 它们都以索引开头,但我不知道接下来的内容。同一目录中还有其他文件,因此删除所有文件将不起作用。如何使用通配符删除C中的多个文件?

我知道你可以读取目录,迭代每个文件名,读取前5个字符,比较,如果它适合然后删除,但是,有没有更简单的方法(这是我目前做的方式) ?

这是标准C语言,因为代码在Linux和Windows上运行。

回答

9

当您指出您可以使用diropen,dirread,dirclose来访问目录内容,您自己的函数(或将通配符转换为正则表达式并使用正则表达式库)来匹配和取消链接来删除。

有没有一种标准的方法来做到这一点更容易。可能会有图书馆,但它们不会比你所做的更有效率。通常情况下,文件查找功能会在您提供代码的匹配和操作部分的地方进行回调。你所要保存的只是循环。

+0

感谢您的回答。当人们告诉你什么事情不能完成时,我总是很感激,而不是说服你。 – Uri 2010-01-28 17:49:46

+2

在Unix上,而不是将通配符转换为正则表达式,您应该使用fnmatch(http://www.opengroup.org/onlinepubs/000095399/functions/fnmatch.html)。 – 2010-01-28 17:54:25

6

如果你不介意平台特有的,你可以使用system()电话:

system("del index*.txt"); // DOS 
system("rm index*.txt"); // unix 

Here是在system()调用一些文件,这是(cstdlib)标准C库的一部分。

+2

'系统'是按照定义特定的实现,所以我总是添加一个骑手来查找相关的供应商文档(如果你能找到它的话)。原则最少的惊喜。 – dirkgently 2010-01-28 17:01:38

+1

谢谢,但system()是一个安全噩梦。 – Uri 2010-01-28 17:42:23

0

这是所有的程序吗?如果是这样,我们在命令行中执行通配符扩展为您提供:

int main(int argc, char* argv[]) 
{ 
    while (argc--) 
    remove(argv[argc]); 
} 

在Windows,你需要对“setargv.obj”,包括在VC标准lib目录链接。