LAN上のファイルを削除するには?

解決


ブラックコーヒー  2014-07-13 08:22:03  No: 46449

LAN上のファイルを削除したりリネームしたりしたいのですがうまく行きません。
DeleteFile()にPathを渡してもFalseが返ってきてしまいます。
どのようにしたら削除出来るのでしょうか?


igy  2014-07-13 08:59:49  No: 46450

ちなみに、FileExists 関数で、ファイルが存在するか確認した場合、どうなりますか?


ブラック・コーヒー  2014-07-13 18:56:36  No: 46451

FileExists関数でも、やはりFalseが返ってきます。
ちなみに、ファイルのPath指定は、
TCPIPによるLAN接続なので下記のようにしています。
  (例)  NetPC1:\Home\Common\DBBackup.FBK
そもそも、この辺りに問題がありそうな気がするのですが如何でしょうか?


ブラック・コーヒー  2014-07-13 19:15:35  No: 46452

追伸です。
ファイルのPath指定をNamedPipeプロトコルの形式に変更して
  (例) \\NetPC\\Home\Common\DBBackup.FBK
にすると、FileExists(), DeleteFile() ともに成功します。

ただ、NamedPipeプロトコルは古い規格なので、あまり使いたくないと考えています。
ですので、TCP/IP接続を前提にして指定の仕方を確立させたいと考えています。

よろしくお願いします。


Quest  2014-07-13 19:22:34  No: 46453

その削除したいファイルは、エクスプローラーから参照できますか?
その時のファイルのフルパスはどのようになりますか?
DeleteFile()で削除するには、そのファイルが共有フォルダにあって
相応の権限がないと出来ないと思いますが。
多分ファイル名の指定は、Homeが共有フォルダだった場合
\\NetPC1\Home\Common\DBBackup.FBK
などの様になると思います。


Quest  2014-07-13 19:26:32  No: 46454

あら、行き違いでした。
>TCP/IP接続を前提にして指定の仕方を確立
というのがよく判りませんが
NetPC1のアドレスが192.168.1.10だとした場合
\\192.168.1.10\Home\Common\DBBackup.FBK
ではどうでしょう?


DEKO  2014-07-13 20:52:52  No: 46455

まずはここを。

[OSI参照モデル]
http://ja.wikipedia.org/wiki/OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB#.E5.B1.A4.E5.88.A5.E3.81.AE.E4.BE.8B

レイヤーの定義は諸説ありますが、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


ブラック・コーヒー  2014-07-14 07:31:52  No: 46456

igyさん、Questさん、DEKOさん。
皆さん、ありがとうございました。
\\<コンピュータ名>\共有名 という指定方法は、NamedPipeプロトコルで繋がっていないと使えないと思い込んでいました。
皆さんの説明のおかげで、私の勘違いでご迷惑をお掛けしたことが良く分かりました。
でも、スッキリしました。
誠にありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加