![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
こんにちわ。
VBで定期的にアップロードされてくるテキストファイルを処理するツールを作成しています。
Win2K環境で、クライアントからFTP転送であるテキストファイルが転送されてきます。
VBで作成中のツールでは1分おきにファイルの有無を確認しています。
当初はうまく動いていましたがたまにエラーが出るようになりました。
いろいろ状況を見ていますと、ファイル転送と同タイミングでファイルを開いた場合に起こっているようです。
FTP転送の有無にかかわらず、該当するファイルが自分自身のプログラム以外から開かれているということをチェックする方法はないですか?
開いていればスキップすると言う方法でこのエラーを回避したいのですが・・・。
お手数をお掛けいたしますが何卒お願い致します。
A 回答 (11件中1~10件)
- 最新から表示
- 回答順に表示
No.11
- 回答日時:
話が原点に戻りそうですが、、、、
#10さん
strSQL = "SELECT * FROM Win32_Process where name = 'ftp.exe'"
Wscript.Echo GetObject("winmgmts:").ExecQuery(strSQL).Count
ということをしたいのですか?
http://okweb.jp/kotaeru.php3?q=655810
私も先ほどの#8でのスクリプトのどこがWin2Kでのサポート外に該当するかわかりませんが、上記スクリプトは2K環境でも動きました。
しかし、、、
FTPでアプロード中に、サーバ側でftp.exeを起動しているとは限らないのではないですか?
質問者は
・サーバ側の$ftproot以下のファイルを監視する
・見つかったファイルが、受信中か完了かを知りたい(サーバ側で)
というのではないですか?
私が知っている限りですが[ftp.exe]は単なるクライアントアプリだと思うのですが、、、
サーバでは、受信をサービス(inetinfo.exe)が行っていると思っています。
http://www.geocities.co.jp/SiliconValley-SanJose …
なのでftp.exeが起動している確立があるのは、送信側のクライアントの方で、サーバ側は普通であれば立ち上がっていなく、仮に起動していても、それが受信中かどうかはわからないのでは?そうじゃなくても、ftp.exeではなくFFFTPなどのツールアプリで行っているかもしれないし、、、
#10さんの履歴を見るとASPでの回答が多いので、私の知らない'おまじない'があるのか、あるいは私の認識違いかと思って、疑問に思ったことを(便乗して)投げさせていただきました。
m(_ _)m
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_06.png?e8efa67)
No.10
- 回答日時:
>#8さん
>質問者はWin2Kのようですが、そのスクリプトは動作サポート外では?
こちらなのですが、OSの記載はありませんでした。
当方はXPでしか動作確認はできていないので、「自信なし」。
http://www.microsoft.com/japan/technet/scriptcen …
No.9
- 回答日時:
#8さん
質問者はWin2Kのようですが、そのスクリプトは動作サポート外では?
(違っていたらすいません)
http://www.microsoft.com/japan/technet/scriptcen …
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_06.png?e8efa67)
No.8
- 回答日時:
1050YENさんのNo.7の方法で解決かも知れませんが、
一応、ftp.exeが動いているかのチェックを
スクリプトセンターにあったコードに判断を1つ加えてみました。
Set objDictionary = CreateObject("Scripting.Dictionary")
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcesses = objWMIService.ExecQuery _
("Select * from Win32_Process")
For each objProcess in colProcesses
objDictionary.Add objProcess.ProcessID, objProcess.Name
Next
Set colThreads = objWMIService.ExecQuery _
("Select * from Win32_Thread")
swFind = 0
For each objThread in colThreads
intProcessID = CInt(objThread.ProcessHandle)
strProcessName = objDictionary.Item(intProcessID)
If InStr(strProcessName, "ftp.exe") <> 0 Then
swFind = 1
Wscript.Echo strProcessName & VbTab & objThread.ProcessHandle & _
VbTab & objThread.Handle & VbTab & objThread.ThreadState
Exit For
End If
Next
If swFind <> 1 Then Wscript.Echo "FTP Not Running!"
No.7
- 回答日時:
検証してみました。
WinXPSp2にて、IISのFTPサーバを立ち上げ、FTPコマンドで大きいファイルのアップロードを行い、先に挙げた参考URLのIsNoOpen関数を利用しました。
(1)For Binary Lock Read As #1
(2)For Binary Lock Read Write As #1
どちらでも、アップロード中を認識できました。
これまた以前に言いましたが、FTP側ではどうやら
※FTP受信処理
{
ファイルオープン(新規モード)
{
受信終了まで書き込み
}
ファイルクローズ
}
という処理を行っているようです。(検証結果からの考察)
ちなみに、ファイルをFTPがロックしていようといまいと、FTPがオープンしているだけで、他から排他で開くことができないので、意識する必要はありません。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_06.png?e8efa67)
No.6
- 回答日時:
>チェックを行うVB側の方の処理を書いたのですよー
考えてみれば、先行Openする方がLockしてくれないと
VB側ではこの方法では検知不可能ですね。
> FTP接続が実行中だとかいう情報をAPIなどから...
タスクマネージャを動かしておいて、コマンドプロンプトで
FTPを起動させると、プロセスに「ftp.exe」が起動されますから、これを確認すれば良いと思います。
参考URLはプロセス関係のスクリプト集です。
参考URL:http://www.microsoft.com/japan/technet/scriptcen …
No.5
- 回答日時:
>#3さんの、
>>>Open inXlsFileName For Binary Lock Read Write As #1
>>となっていますが、Writeはきっといらないですね^^;
>は、逆でしょう。
いえ、FTP側はVBではなさそうなので、チェックを行うVB側の方の処理を書いたのですよー
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_06.png?e8efa67)
No.4
- 回答日時:
#3さんの、
>>Open inXlsFileName For Binary Lock Read Write As #1
>となっていますが、Writeはきっといらないですね^^;
は、逆でしょう。
こちらの思惑では、FTPがWriteロックしてくれていれば、
Lock Writeによって読み出しがエラーになるので、
「まだ出力中かも知れない」と判別がつくのです。
FTPの方はファイルをロックしてくれていないのでしょうか。
この回答への補足
皆さん、いろいろコメントを有難う御座います。
まず、FTPサーバー機能はWin2kの標準機能を採用しています。
各クライアントからのFTPソフトは何か決まっていませんのでどのような方法でファイルをアップロードしているかは特定出来ません。
アップロードしている最中であるとか、FTP接続が実行中だとかいう情報をAPIなどから取得する他ないのでしょうか??
No.3
- 回答日時:
追記です。
#2の参考URLは
>Open inXlsFileName For Binary Lock Read Write As #1
となっていますが、Writeはきっといらないですね^^;
No.2
- 回答日時:
>Open Filename For Input As #fileNo
#1さんが言われている
>Lock Read Write
ですが、
http://okweb.jp/kotaeru.php3?q=611232
にて「IsNoOpen」の命名で関数化されています。
※FTP受信処理
{
ファイルオープン(新規モード)
{
受信終了まで書き込み
}
ファイルクローズ
}
という感じで、FTP側が処理をしていたら、この方法で回避できると思います。
もし↓のような2部構成になっていた場合は、回避しようがありませんので、別方法を考える必要があるかもしれません。
※FTP受信処理パート1
{
ファイルオープン(新規モード)
受信データを書き込み
ファイルクローズ
}
※FTP受信処理パート2
{
ファイルオープン(追加モード)
受信データを書き込み
ファイルクローズ
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
binファイルを解凍したいの...
-
ELFファイルを逆コンパイルした...
-
exeファイルの中身を見る方法は...
-
「ブルーファイル」と「グリー...
-
VBAでのicsファイル変換
-
自分で作成した重要ファイルを...
-
S_IFREG
-
Seasar2のdiconファイルの読み方
-
Latexで図番号だけを「図1.1」...
-
bibtexで参考文献作成できない
-
音声ファイルを実行ファイルに...
-
バッチ処理で追記コピーしたい
-
実行ファイル(.exeファイル)...
-
reaper音声ファイルについて
-
ラッパーって何なんでしょう・...
-
公文書のxmlファイルの開き方が...
-
テキストファイルの最終行の削除
-
VB.netで DirListBoxを使いたい
-
VBSでExcelファイル起動時、重...
-
コマンドプロンプトで作成日時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
binファイルを解凍したいの...
-
アクセス 壊れた? 「ファイ...
-
コマンドプロンプトで作成日時...
-
公文書のxmlファイルの開き方が...
-
#include <Windows.h>というヘ...
-
.NETアプリを作ったときの .man...
-
exeファイルの中身を見る方法は...
-
jarファイル
-
自分で作成した重要ファイルを...
-
Seasar2のdiconファイルの読み方
-
VBAでのicsファイル変換
-
バッチ処理で追記コピーしたい
-
監視ツールを入れさせられまし...
-
参照するファイルをワイルドカ...
-
「ブルーファイル」と「グリー...
-
HTMLからのBATファイル実行
-
Latexで図番号だけを「図1.1」...
-
C言語---ファイルに出力したデ...
-
Windowsのエクスプローラーでフ...
-
warファイルをEclipseでプロジ...
おすすめ情報