开发者

Using windows CopyFile function to copy all files with certain name format

Hello! I am updating some C code that copys files with a certain name. basically, I have a directory with a bunch of files named like so:

AAAAA.1.XYZ

AAAAA.2.ZYX

AAAAA.3.YZX

BBBBB.1.XYZ

BBBBB.2.ZYX

Now, In the old code, they just used a call to ShellExecute and used xcopy.exe. to get all the files starting with AAAAA, th开发者_如何学Pythoney just gave xcopy the name of the file as AAAAA.* and it knew to copy all of the files starting with AAAAA. now, im trying to get it to copy with out having to use the command line, and I am running into trouble. I was hoping CopyFile would be smart enough to handle AAAAA.* as the file to be copied, but it doesnt at all do what xcopy did. So, any Ideas on how to do this without the external call to xcopy.exe?


Check this out as a starting point

http://msdn.microsoft.com/en-us/library/aa364418(VS.85).aspx

or even better this full example

http://msdn.microsoft.com/en-us/library/aa365200(v=VS.85).aspx


You could also use SHFileOperation or IFileOperation (the latter being only available from Vista upwards but is now the recommended way according to MSDN). SHFileOperation supports wildcards and displays a progress by default, but there's also a flag for silent operation.

Check out the following MSDN links for more info:

http://msdn.microsoft.com/en-us/library/bb762164(v=VS.85).aspx

http://msdn.microsoft.com/en-us/library/bb775771(v=VS.85).aspx


You would basically have to write code to reproduce the functionality in xcopy. To do so, you must build a list of files by accessing the path and recursing through it. Test each found entry with your pattern and keep only those that match. Then iterate over that list with CopyFile.

See the following set of functions that can help you build the file list:

http://en.wikipedia.org/wiki/Dirent.h

It might just be easier to keep using xcopy unless you have a specific reason not to.


There are lots of ways to do it. I'd probably use a loop of FindFirstFile() / FindNextFile().

However, is there any reason you can't still use xcopy? You can launch it with CreateProcess(). It isn't pretty, but it works.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜