0

こんにちは!特定の名前のファイルをコピーする C コードを更新しています。基本的に、次のような名前のファイルがたくさんあるディレクトリがあります。

AAAAA.1.XYZ
AAAAA.2.ZYX
AAAAA.3.YZX
BBBBB.1.XYZ
BBBBB.2.ZYX

さて、古いコードでは、ShellExecute への呼び出しを使用し、xcopy.exe を使用していました。AAAAA で始まるすべてのファイルを取得するために、xcopy にファイルの名前を AAAAA.* として指定するだけで、AAAAAA で始まるすべてのファイルをコピーすることがわかりました。現在、コマンドラインを使用せずにコピーしようとしていますが、問題が発生しています。CopyFile がコピーされるファイルとして AAAAA.* を処理するのに十分スマートであることを望んでいましたが、xcopy が行ったことをまったく実行しません。では、xcopy.exe への外部呼び出しなしでこれを行う方法についてのアイデアはありますか?

4

4 に答える 4

3

出発点としてこれをチェックしてください

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

またはさらに良いこの完全な例

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

于 2010-06-11T21:11:41.093 に答える
2

SHFileOperationまたはを使用することもできますIFileOperation(後者はVista以降でのみ利用可能ですが、MSDNによると現在推奨されている方法です)。SHFileOperationはワイルドカードをサポートし、デフォルトで進行状況を表示しますが、サイレント操作のフラグもあります。

詳細については、次のMSDNリンクを確認してください。

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

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

于 2010-06-11T21:36:16.353 に答える
1

基本的に、xcopyの機能を再現するためのコードを作成する必要があります。これを行うには、パスにアクセスしてパスを繰り返し実行することにより、ファイルのリストを作成する必要があります。見つかった各エントリをパターンでテストし、一致するものだけを保持します。次に、CopyFileを使用してそのリストを繰り返し処理します。

ファイルリストの作成に役立つ次の一連の関数を参照してください。

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

特別な理由がない限り、xcopyを使い続ける方が簡単かもしれません。

于 2010-06-11T21:17:27.547 に答える
1

それを行う方法はたくさんあります。おそらく、FindFirstFile() / FindNextFile() のループを使用します。

ただし、まだ xcopy を使用できない理由はありますか? CreateProcess() で起動できます。きれいではありませんが、機能します。

于 2010-06-12T16:18:02.620 に答える