Discussion:
イーサーネット内のファイルアクセスについて
(too old to reply)
unknown
2009-08-11 05:18:02 UTC
Permalink
上田です。

制作環境はVC++6、Win32
パソコンが3台あり、1台がマスタパソコン、残りがスレイブパソコンとします。
データファイルはスレイブからマスタに送られるものとします。
送られるファイル名はパソコン毎に異なるものとします。
ネットワークは成立しているものとします。
 この条件下でファイルを送信する場合の方法として
1.共有ディレクトリdataをマスタにつくり、それにドライブ文字を割り当てる
  擬似ドライブ宛にファイルをopenしWrite, closeでマスタにファイルを
  書き込む。
2.マスタのコンピュータ名がmasterだとしたら、
  \\master\data\filename.txtでopenしWrite, closeでマスタにファイルを
書き込む。

この二つを考えています。
皆さんならどちらの方法を取りますか。
ご意見をお聞かせ下さい。

/***********************
堺市南区原山台
上田 恭平
E_Mail ***@sannet.ne.jp
************************/
UETA, Shin-ichi
2009-08-27 02:51:29 UTC
Permalink
こんにちは、植田です。
Post by unknown
皆さんならどちらの方法を取りますか。
case-by-case

とりあえず、アプリケーションとしてはUNCパスを許容できる
ように作り込んでおき、運用環境にあわせてどちらにも対応
できるように備えておきます。

依存するコンポーネントがUNCパスを許容していなければ
ドライブレターを割り当てるしかないでしょうし、認証プロセス
を自動的に済ませておきたい場合もあるでしょう。
ログオン時のユーザーアカウントとアプリケーション実行時の
ユーザーアカウントが異なる場合はUNCパスでアクセスする
しかないかもしれません。

プロトコルが根本的に異なるならともかく、どちらがいいとは
一概には言えませんし、運用上の都合、顧客あるいは
設計者の好みにもよるでしょうから、状況にあった最適な
方法を選べばいいと思います。
--
植田システム設計事務所
Ueta System Design Studio
http://www.usdesign.jp/
植田真一
mailto:***@usdesign.jp
unknown
2009-08-28 04:27:02 UTC
Permalink
植田さん、ありがとうございます。
取りあえず、UNCで、だめならドライブ文字で行ってみます。

 さて、この3台の中から、別のサーバーパソコンにアクセスしたい要望があります。
3台間のアクセスは共有名を統一していますが、それでは外のサーバーに
アクセスするのに具体的にどのようなWinAPIを用いればよいのでしょうか。
 頭に思い浮かぶのはWNetAddConnection2ですが、これだとパスワードを
送れそうですが、もうひとつわかりません。3台間はこの関数をしなくとも
事前にフォルダに共有設定しておくだけでその下にあるサブフォルダやファイルを
自由にアクセスできます。共有設定にはパスワードは掛けません。
 ではこのWNetAddConnection2の役割は何だろうと考え込んでしまいます。
終了時にWNetCancelConnection2を実行しないと別のユーザーとの関係
云々と警告メッセージがでますので、これらの関数はペアで使うのは判りましたが、ピンと来ません。どこかにサンプルコードがあれば、判りやすいのですが
ちょっと見つかりません。あれば教えて頂けないでしょうか。よろしくお願い致します。

/***********************
堺市南区原山台
上田 恭平
E_Mail ***@sannet.ne.jp
************************/
UETA, Shin-ichi
2009-08-28 07:51:46 UTC
Permalink
どうも、植田です。
Post by unknown
3台間のアクセスは共有名を統一していますが、それでは外のサーバーに
アクセスするのに具体的にどのようなWinAPIを用いればよいのでしょうか。
「外のサーバー」はどういう位置づけにあるのでしょうか?

Microsoftネットワークの範囲内であれば他の3台のPCと同じように扱えば
いいだけなのでは?
Microsoftネットワークのノードとして認識できないところにあるのであれば
そもそもドライブレターの割り当てはおろかUNCパスすら使えないでしょう。
Post by unknown
 頭に思い浮かぶのはWNetAddConnection2ですが、これだとパスワードを
送れそうですが、もうひとつわかりません。3台間はこの関数をしなくとも
事前にフォルダに共有設定しておくだけでその下にあるサブフォルダやファイルを
自由にアクセスできます。
CreateFileの呼び出しのタイミングで共有フォルダに接続するのではなく、
任意のタイミング、任意のユーザーアカウントで接続する場合にこのAPIを
用いるのではないかと。

# 共有フォルダへの接続とファイルI/Oは別物。
Post by unknown
どこかにサンプルコードがあれば、判りやすいのですが
ちょっと見つかりません。
普通にWNetAddConnection2でググればいくらでも見つかりますけど...?

MSDNライブラリの英語版も要チェック。
英語版のリファレンスにはサンプルコードもついています。

Windows Networking (WNet)
http://msdn.microsoft.com/en-us/library/aa385406%28VS.85%29.aspx

# MSDNライブラリの日本語版は不完全ですし、誤訳もまれにあるので、
# 英語版にも目を通しておいたほうがいいでしょう。
--
植田システム設計事務所
Ueta System Design Studio
http://www.usdesign.jp/
植田真一
mailto:***@usdesign.jp
unknown
2009-08-28 10:13:01 UTC
Permalink
植田さん、どうもありがとうございました。
サンプルコードありました。助かります。
Post by UETA, Shin-ichi
「外のサーバー」はどういう位置づけにあるのでしょうか?
順序から言えば、3台のローカルネットの中1台から
既にあるサーバーからファイルをもらうことになっています。
予定では特定のフォルダに情報ファイルを書いてもらい、そこに
ファイルを読みに行くことになりそうです。

/***********************
堺市南区原山台
上田 恭平
E_Mail ***@sannet.ne.jp
************************/

Loading...