问题
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