How to remove multiple files in C using wildcards?

拟墨画扇 提交于 2021-01-26 22:57:27

问题


Is there any way in C to remove (using remove()) multiple files using a * (wildcards)? I have a set of files that all start with Index. For example: Index1.txt, Index-39.txt etc. They all start with Index but I don't know what text follows. There are also other files in the same directory so deleting all files won't work.

I know you can read the directory, iterate each file name, read the the first 5 chars, compare and if it fits then delete, but, is there an easier way (this is what I currently do by the way)?

This is standard C, since the code runs on Linux and Windows.


回答1:


As you point out you could use diropen, dirread, dirclose to access the directory contents, a function of your own (or transform the wildcards into a regex and use a regex library) to match, and unlink to delete.

There isn't a standard way to do this easier. There are likely to be libraries, but they won't be more efficient than what you're doing. Typically a file finding function takes a callback where you provide the matching and action part of the code. All you'd be saving is the loop.




回答2:


If you don't mind being platform-specific, you could use the system() call:

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

Here is some documentation on the system() call, which is part of the standard C library (cstdlib).




回答3:


Is this all the program does? If so, let the command line do the wildcard expansion for you:

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

on Windows, you need to link against 'setargv.obj', included in the VC standard lib directory.



来源:https://stackoverflow.com/questions/2156211/how-to-remove-multiple-files-in-c-using-wildcards

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!