LAN上のファイルを削除したりリネームしたりしたいのですがうまく行きません。
DeleteFile()にPathを渡してもFalseが返ってきてしまいます。
どのようにしたら削除出来るのでしょうか?
ちなみに、FileExists 関数で、ファイルが存在するか確認した場合、どうなりますか?
FileExists関数でも、やはりFalseが返ってきます。
ちなみに、ファイルのPath指定は、
TCPIPによるLAN接続なので下記のようにしています。
(例) NetPC1:\Home\Common\DBBackup.FBK
そもそも、この辺りに問題がありそうな気がするのですが如何でしょうか?
追伸です。
ファイルのPath指定をNamedPipeプロトコルの形式に変更して
(例) \\NetPC\\Home\Common\DBBackup.FBK
にすると、FileExists(), DeleteFile() ともに成功します。
ただ、NamedPipeプロトコルは古い規格なので、あまり使いたくないと考えています。
ですので、TCP/IP接続を前提にして指定の仕方を確立させたいと考えています。
よろしくお願いします。
その削除したいファイルは、エクスプローラーから参照できますか?
その時のファイルのフルパスはどのようになりますか?
DeleteFile()で削除するには、そのファイルが共有フォルダにあって
相応の権限がないと出来ないと思いますが。
多分ファイル名の指定は、Homeが共有フォルダだった場合
\\NetPC1\Home\Common\DBBackup.FBK
などの様になると思います。
あら、行き違いでした。
>TCP/IP接続を前提にして指定の仕方を確立
というのがよく判りませんが
NetPC1のアドレスが192.168.1.10だとした場合
\\192.168.1.10\Home\Common\DBBackup.FBK
ではどうでしょう?
まずはここを。
レイヤーの定義は諸説ありますが、Wiki に習うと TCP/IP は
・トランスポート層 (TCP)
・ネットワーク層 (IP)
Named Pipe (名前付きパイプ) はセッション層、DeleteFile() の動作する SMB (SendMessage Block) / CIFS (Common Internet File System) はアプリケーション層となります。
つまり、イロイロな話がゴッチャになっています。仰っている \\<コンピュータ名>\共有名 というのは名前付きパイプでの通信ではなく、単に SMB/CIFS の "UNC パス" です。
#「Named Pipe = SMB/CIFS」ではないですし、
#「パスの頭に \\ 付けたら Named Pipe」でもないですよ。
[第20回 ファイル共有プロトコルSMB/CIFS(その1) (1/3)]
http://www.atmarkit.co.jp/ait/articles/0410/29/news103.html
[第21回 ファイル共有プロトコルSMB/CIFS(その2) (1/3)]
http://www.atmarkit.co.jp/ait/articles/0412/08/news096.html
[第22回 ファイル共有プロトコルSMB/CIFS(その2) (1/3)]
http://www.atmarkit.co.jp/ait/articles/0501/20/news108.html
igyさん、Questさん、DEKOさん。
皆さん、ありがとうございました。
\\<コンピュータ名>\共有名 という指定方法は、NamedPipeプロトコルで繋がっていないと使えないと思い込んでいました。
皆さんの説明のおかげで、私の勘違いでご迷惑をお掛けしたことが良く分かりました。
でも、スッキリしました。
誠にありがとうございました。
ツイート | ![]() |