- PR -

ネットワーク経由ファイル存在チェック

投稿者投稿内容
あいっこ
会議室デビュー日: 2003/01/10
投稿数: 5
投稿日時: 2003-01-10 16:54
はじめまして♪
あいっこです。
.netでネットワークを越えてファイル存在チェックを
行いたいのですが、どうしても出来ません。
今はネットワークドライブの割り当てをし(G:\)
Dim fso, msg, d, s
fso = CreateObject("Scripting.FileSystemObject")
If fso.FolderExists("G:\Loader\") Then
  msg = ("存在します。")
Else
  msg = ("存在しません。")  ←こちらに来ます
End If
と記述してます。
これでは駄目なのでしょうか?
どなたか教えてくださ〜い
まゆりん
ぬし
会議室デビュー日: 2002/08/12
投稿数: 539
お住まい・勤務地: よこはま
投稿日時: 2003-01-10 18:08
こんにちは、まゆりんです。

見た感じですが、ソース自体は問題ないと思います。
(エラーが出ているわけでもなさそうなので・・・)

というわけで私から質問させてください。
・ネットワークドライブを当てたのはサーバ側?クライアント側?
・そのファイルを見るための権限なども調べてみましたか?
・聞く前に事前調査しましたか?(ヘルプや掲示板で過去ログの検索など)

この手のエラーはソースの誤りだけとは限りません。
それと提供される情報が少なすぎます。(開発環境とか)
的確な回答を早く得る為に、もう少し詳しい情報をお願い致します。

※でも、そもそも「ネットワークドライブ」からアクセスすること自体
 おかしいと思うのですが・・・。普通はサーバ名からアクセスするものですよ。
sou
ベテラン
会議室デビュー日: 2002/09/25
投稿数: 56
投稿日時: 2003-01-10 21:25
余談ですが、.Netを使用しているならば、
FileSystemObjectを作成しなくてもいいですよ。
名前空間System.IOのFileクラス、Existsメッソドを
使用すればファイルの存在チェックが可能です。

File.Exists(filePath)

ちなみにフォルダの存在チェックもDirectoryクラスのExistsメッソドを
使用すれば可能です。

Directory.Exists(folderPath)

両メッソドとも存在すればTrueが、存在しなければFalseが返ります。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-01-14 08:30
引用:

あいっこさんの書き込み (2003-01-10 16:54) より:

.netでネットワークを越えてファイル存在チェックを
行いたいのですが、どうしても出来ません。



 「ドライブ割り当て」をする前には、どのようにチェックしましたか?
 「チェックしたいファイルがあるPCで使用しているOS」は、なんですか?

 NT系のOSで、NTFSを使用している場合、ファイルのセキュリティをパスしなければなりません。対象のファイルがあるディレクトリをドライブ割り当てするとき、ユーザ名とパスワードを聞かれましたか?(もしくは、最初に対象のファイルがあるPCの公開ディレクトリにアクセスしたとき)。聞かれたならば、「WNetAddConnection2」Win32API関数で、セキュリティをパスする必要があります。この関数はWin32APIで、DLLが無いらしく、VB.NETから直接使用することができません(でした)。VC++.NETでラップ関数を作り、VB.NETから呼び出します。


#Windowsって、「フォルダ」と「ディレクトリ」をどういう意味で使い分けているんでしょうねぇ…

と書いてから、もう一つの質問のほう、見ました。
もしかして、A, B 2台のPCがあって、Aに置いている実行ファイルをBで実行し(Webアプリ含む)、Bの側から操作して、Aにあるファイルをチェックしたい、ということでしょうか。それならば、Windowsではなく、.NETのセキュリティをパスしなければなりません。
 どちらにしても、もう少し環境について、詳しく書いてください。

[ メッセージ編集済み 編集者: Jitta 編集日時 2003-01-14 08:37 ]
あいっこ
会議室デビュー日: 2003/01/10
投稿数: 5
投稿日時: 2003-01-17 09:28
返答遅くなりました。
皆さんの意見を参考にし色々と試行錯誤の結果、
net.MapNetworkDrive("G:", "サーバ名", , "ユーザ名", "パスワード")
とネットワーク接続をし、
SOUさんのFile.Exists(filePath) を使用すれば出来ました。

まだ初心者の為、質問内容・提供する情報が
少なすぎ申し訳ありませんでした。
これからも宜しくお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-01-17 12:10
引用:

あいっこさんの書き込み (2003-01-17 09:28) より:

net.MapNetworkDrive("G:", "サーバ名", , "ユーザ名", "パスワード")
とネットワーク接続をし、
SOUさんのFile.Exists(filePath) を使用すれば出来ました。


 えっっ!!かなり探したのに、そんなの出てこなかった・・・と思ったら、Windows Script Host!?
VB.NETではなく、ASP.NETをVBScriptで使用ですか??
あいっこ
会議室デビュー日: 2003/01/10
投稿数: 5
投稿日時: 2003-01-17 12:34
そうです。ASP.NETです。
これも情報として書き子しなければならないのですね!
(やっぱり初心者です!スミマセン)

net = CreateObject("WScript.Network")  ←ネットワーク接続
net.MapNetworkDrive("G:","サーバ名",,"ユーザ名","パスワード")
If File.Exists("G:\フォルダ名\TEST.TXT") = False Then
  ファイルなしの処理
End If
net.RemoveNetworkDrive("G:") ←ネットワーク切断

って感じで出来ました。
色々考えていただいてありがとうございました。

ふじすけ
会議室デビュー日: 2003/01/17
投稿数: 2
投稿日時: 2003-01-17 19:26
はじめまして。ふじすけです。

私もあいっこさんと同じように、ASP.NETでのネットワーク共有ファイルへの
アクセスに悩んでいます。
あいっこさんの場合、最終的にはWSHを使用してネットワークドライブの割り当てを
行った上でファイルの存在チェックをして解決したようですが、
私の場合、仕様上、WSHはなるべく使いたくないのです。

状況としては、
マシンA : WEBサーバー( Windows2000)
マシンB : ドキュメントサーバー(WindowsNT)
のイントラネット環境下で(共に同じドメインです)、

1. ドキュメントサーバーの設定
@マシンB内のDドライブに「Test」フォルダを作成。
A「Test」フォルダへ「Test.txt」ファイルを作成。
BマシンBの「Test」フォルダをネットワーク共有させ、
アクセス権を「Everyone(フルコントロール)」に設定。

2. Webサーバーの設定

マシンAのaspxファイルに、

Dim lo_class_FileInfo = System.IO.FileInfo
Response.write lo_class_FileInfo.Exists("\\マシンB\Test\Test.txt")

と記述し、マシンBのファイル存在チェックを実行させます。

上記の状態で、マシンCからマシンAのaspxファイルを実行してみたところ、
「False」が返ってきてしまいます。

エクスプローラではマシンBの共有フォルダ内のファイルへは
マシンAからもマシンCからもアクセスできるのに、
WEBを介するとアクセスできないのはなぜなのでしょうか?

ちなみに、マシンAのマシンBを閲覧するためのソリューションの「web.config」では
クライアント偽装を有効にし、認証を統合Windows認証にしてあります。

どなたか解決方法をご存知でしたらご教授ください。

※本来なら別にスレッドを立てるべきだったのかもしれませんが、
件名が類似しているため、書き込ませていただきました。


スキルアップ/キャリアアップ(JOB@IT)