- - PR -
ネットワーク経由ファイル存在チェック
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 と記述してます。 これでは駄目なのでしょうか? どなたか教えてくださ〜い | ||||
|
投稿日時: 2003-01-10 18:08
こんにちは、まゆりんです。
見た感じですが、ソース自体は問題ないと思います。 (エラーが出ているわけでもなさそうなので・・・) というわけで私から質問させてください。 ・ネットワークドライブを当てたのはサーバ側?クライアント側? ・そのファイルを見るための権限なども調べてみましたか? ・聞く前に事前調査しましたか?(ヘルプや掲示板で過去ログの検索など) この手のエラーはソースの誤りだけとは限りません。 それと提供される情報が少なすぎます。(開発環境とか) 的確な回答を早く得る為に、もう少し詳しい情報をお願い致します。 ※でも、そもそも「ネットワークドライブ」からアクセスすること自体 おかしいと思うのですが・・・。普通はサーバ名からアクセスするものですよ。 | ||||
|
投稿日時: 2003-01-10 21:25
余談ですが、.Netを使用しているならば、
FileSystemObjectを作成しなくてもいいですよ。 名前空間System.IOのFileクラス、Existsメッソドを 使用すればファイルの存在チェックが可能です。 File.Exists(filePath) ちなみにフォルダの存在チェックもDirectoryクラスのExistsメッソドを 使用すれば可能です。 Directory.Exists(folderPath) 両メッソドとも存在すればTrueが、存在しなければFalseが返ります。 | ||||
|
投稿日時: 2003-01-14 08:30
「ドライブ割り当て」をする前には、どのようにチェックしましたか? 「チェックしたいファイルがある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-17 09:28
返答遅くなりました。
皆さんの意見を参考にし色々と試行錯誤の結果、 net.MapNetworkDrive("G:", "サーバ名", , "ユーザ名", "パスワード") とネットワーク接続をし、 SOUさんのFile.Exists(filePath) を使用すれば出来ました。 まだ初心者の為、質問内容・提供する情報が 少なすぎ申し訳ありませんでした。 これからも宜しくお願いします。 | ||||
|
投稿日時: 2003-01-17 12:10
えっっ!!かなり探したのに、そんなの出てこなかった・・・と思ったら、Windows Script Host!? VB.NETではなく、ASP.NETをVBScriptで使用ですか?? | ||||
|
投稿日時: 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 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認証にしてあります。 どなたか解決方法をご存知でしたらご教授ください。 ※本来なら別にスレッドを立てるべきだったのかもしれませんが、 件名が類似しているため、書き込ませていただきました。 |