DOBON.NET DOBON.NETプログラミング掲示板過去ログ

ファイルの強制上書コピー

環境/言語:[WindowsXP .NET3.5]
分類:[.NET]

いつも参考にさせていただいております。

タイトルにもる通りなんですが、WIN32APIのCopyFile関数を使用し
ファイルコピーをしているのですが、読込属性のファイルがあると
CopyFile関数の第3引数をFALSEにしていても失敗すると言うことが
分かりました。

常に属性に関係なく強制上書したいのですが、何か良い方法は
ありませんか?やはり上書対象ファイルの属性を変更するか、
コピー前に削除するしかありませんか?

ちなみに以前投稿させていただいた質問↓
http://dobon.net/cgi-bin/vbbbs/cbbs.cgi?mode=al2&namber=30279&rev=&no=0
であるようにロングファイル名(260文字超過)パスに対応する
必要があるので.NETのPathクラス、Fileクラス、Directoryクラスは
利用できずUNCパス対応の関数が必須条件となります。

対策をご存知の方、教えてください。お願いします。

================開発環境===================
OS: Windows XP SP3
VS: 2008
.NET:3.5
■No30330に返信(ホエホエさんの記事)
> WIN32APIのCopyFile関数を使用し
> ファイルコピーをしているのですが
なかなか複雑なコピー機能を実装されているようですが、もしかして
ハードリンクやリパースポイントなども考慮した設計なのでしょうか。

> やはり上書対象ファイルの属性を変更するか、
> コピー前に削除するしかありませんか?
だと思います。不可視属性やシステム属性なども同様に。

> (260文字超過)パスに対応する
そういえば、FastCopy は MAX_PATH 超過対応していたと思いますが、
それをコマンドラインモードで呼び出したりはできないでしょうか。
http://ipmsg.org/tools/fastcopy.html

# ソースコードを眺めてみたけれど、多機能すぎて追い切れなかった…。
魔界の仮面弁士さん>
ご返信ありがとうございます。

やりたいこととしてはディレクトリコピーなんですが、
ロングパス、上書コピー、ネットワークPCに
対応していることが必須なんです。

最初は.NET標準のPath、File、Directoryクラスを使った
自作メソッドを作成しましたがロングパスに対応できず断念。

次にMicrosoft.VisualBasic.dllを参照追加して
Microsoft.VisualBasic.FileIO.FileSystem.CopyDirectoryを
使ってやろうと思ったんですが上書に非対応らしく断念。

で現在教えていただいたWIN32APIを用いた自作メソッドで
作成している状態でして…コマンドラインでやるなら
DOS標準のXCOPYでも良いかもしれません。

ロングパス、上書コピーに対応したディレクトリコピーが
あれば1番良いのですが点…

DOBON.NET | プログラミング道 | プログラミング掲示板