• ベストアンサー

Visual Basic Express Editionでの常駐ファイルコピー

プログラムには素人ですが Visual Basic Express Editionで下記のようなソフトは簡単にできるのでしょうか。 2つのフォルダー間の3ファイルの同期させたい。 入力指定は フォルダー名とファイル名3個 どちらかのフォルダーのファイルスタンプ(1分以内に数回更新される)が変更があると即座にこぴーする常駐ソフトであること。 簡単にできるのなら、VBかVCでつくりたいのです。よろしく。

noname#182544
noname#182544

質問者が選んだベストアンサー

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.5

<HTML><TITLE>ファイル監視</TITLE> <SCRIPT LANGUAGE='VBSCRIPT'></SCRIPT> <BODY><TABLE> <TR><TD COLSPAN='3' ALIGN='CENTER'>ファイル監視</TD></TR> <TR ALIGN='CENTER'><TD></TD><TH>送出側</TH><TH>受取側</TH></TR> <TR><TH>ファイル1</TH> <TD><INPUT TYPE='FILE' NAME='FILE' SIZE='60'></TD> <TD><INPUT TYPE='FILE' NAME='FILE' SIZE='60'></TD></TR> <TR><TH>ファイル2</TH> <TD><INPUT TYPE='FILE' NAME='FILE' SIZE='60'></TD> <TD><INPUT TYPE='FILE' NAME='FILE' SIZE='60'></TD></TR> <TR><TH>ファイル3</TH> <TD><INPUT TYPE='FILE' NAME='FILE' SIZE='60'></TD> <TD><INPUT TYPE='FILE' NAME='FILE' SIZE='60'></TD></TR> <TR><TD><INPUT TYPE='BUTTON' VALUE='開始' ID='B1' ONCLICK='EXEC'> </TD><TD COLSPAN='2'><INPUT TYPE='BUTTON' VALUE='終了' ID='B2' ONCLICK='STP = True' DISABLED></TD></TR> <TR><TD></TD><TD COLPAN='2'> <TEXTAREA ID='LOG' COLS='45' ROWS='5' READONLY></TEXTAREA> </TD></TR> </TABLE></BODY> <SCRIPT LANGUAGE='VBSCRIPT'> Option Explicit Dim FSO, CTL, EXE, TRM, TMR Dim STP, ZEN(), I, J, T, S Dim LOG 'ロギング領域 Set FSO = CreateObject("Scripting.FileSystemObject") Set CTL = Document.GetElementsByName("FILE") Set EXE = Document.GetElementById("B1") Set TRM = Document.GetElementById("B2") Set LOG = Document.GetElementById("LOG") Sub EXEC() For I = 0 To 5   If Trim(CTL(I).Value) = "" Then     MsgBox "ファイル名が未入力です", vbCritical, "エラー"     CTL(I).Focus     Exit Sub   End If Next For I = 0 To 5   CTL(I).ReadOnly = True Next ReDim ZEN(2) LOG.Value = "" EXE.Disabled = True TRM.Disabled = False STP = False TMR = SetTimeout("KANSHI", 100, "VBScript") End Sub Sub KANSHI() ClearTimeout TMR For I = 0 To 4 Step 2   On Error Resume Next   T = CTL(I).Value   If FSO.FileExists(T) Then     J = I / 2     S = FSO.GetFile(T).DateLastModified     If S <> ZEN(J) Then       ZEN(J) = S       FSO.CopyFile T, CTL(I + 1).Value, True       If Err.Number = 0 Then         T = T & "をコピーしました" & vbNewLine         LOG.Value = LOG.Value & T         LOG.ScrollTop = 999999       End If     End If   End If   On Error GoTo 0   If STP Then     For J = 0 To 5       CTL(J).ReadOnly = False     Next     EXE.Disabled = False     TRM.Disabled = True     Exit Sub   End If Next TMR = SetTimeout("KANSHI", 100, "VBScript") End Sub </SCRIPT> </HTML> ★長くなるので、タグやプログラムは詰めて記述しました。  後で分かり易いように編集してください。 ★字下げのため、漢字空白を使っています。コピペ後、漢字空白を  半角空白×2に変換してください。 ★簡素化のため、色やフォントは指定していません。適宜、体裁を  整えてください。 ★横着したのでファイル1~3は全て左から右へのコピーです。  間違え易いとお考えの場合は適当に修正してください。 ★初回は前回情報が無いので、必ずコピーします。 ★コピーした時だけログを出すようにしています。実行時間が長く  ログの負荷が大きくなりそうなら、削除してください。

noname#182544
質問者

お礼

ありがとうございます。 作動することができました。VBSCRIPTなので、ほかにも応用のきく良い回答です。 早い対応でありがとうございました。感謝します。

その他の回答 (5)

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.6

追伸 念のため、使い方をお知らせします。 先のプログラムをテキストエディタにコピペ、漢字空白→半角空白 その後、拡張子を.HTAとしてファイルに保存してください。 実行する時はエクスプローラでHTAファイルをダブルクリックすれば OKです。

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.4

先ずは体裁から。 2個のフォルダと3個のファイル、都合6個のパスはどのように 指定させるつもりですか?(コマンドライン or 画面) 画面なら、HTAがお勧めです。ブラウザがあれば即座に実行できます。 ソーステキスト(HTMLみたいなもの)だけで、ネイティブコードは なく、頒布する際に、RunTimeなど何も必要ではありません。 次はコピーのルールです。Aフォルダ⇒Bフォルダのような一方的な ものなら、特に問題ないのですが、双方向ですと規約が必要ですし、 コピー中は更新プログラムを止めるなどの制御も必要になってきます。 このへんは解決しているのでしょうか?

noname#182544
質問者

補足

回答ありがとうございます。 1分以内に数回更新される(常駐)がネックでエクセルのVBは多少わかるからVisual Basicで簡単にできないかなと質問したのです。、 HTAがあるということは知らなかったですが、HTAで可能なら教えてほしい。 最低の必要としてるコピーのルール (1ファイルが逆方向) file 1を Aフォルダ⇒Bフォルダ へコピ- file 2を Aフォルダ⇒Bフォルダ へコピ- file 3を Bフォルダ⇒Aフォルダ へコピ- file1-3の名前はHTAを常駐させる前に書きかえる。 よろしくご教授おねがいします。

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.3

フォルダーやファイルの監視ならSystem.IO.FileSystemWatcherクラスを使うのが妥当かもしれません

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

内容は簡単です。すぐ作れます。 問題は常駐の形態で、単に普通のプロセスとして無限ループしながら タイムスタンプを監視する形式と、システムの一部(サービスや ドライバといった形式)で常駐させる方法があります。無論、後者は かなりの知識が必要なので、やめた方がいいでしょう。 VBやVCどころか、Scriptでも実現可能です。 尚、監視の際にはSleepを入れるのを忘れずにおいてください。 入れないとCPUタイムを恐ろしく浪費してしまいます。

noname#182544
質問者

補足

回答ありがとう。 無限ループしながらタイムスタンプを監視する形式をためしてみたい が 基本的な命令はなにを使用したらいいのですか。 VB入門書で解決できる範囲なのですか、 1.ファイルタイムスタンプの情報取得 2.Sleepの入れ方 それか、参考になるWEBでも教えてください。

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.1

フォルダAのファイルA-1,A-2,A-3 フォルダBのファイルB-1,B-2,B-3 フォルダAのみが更新され、フォルダBに上書きする、という場合か、あるいは、A-1,A-2,B-3のみが更新され、それぞれ逆のフォルダへ上書きするという場合は問題なさそうです。 A-1,B-1がそれぞれ別のタイミングで更新され、タイムスタンプによって新しい方を古い方へ上書きする、という形だと問題が発生すると思われます。 例えば、A-1,B-1がほぼ同時に更新された場合、仮にB-1がほんの僅かに遅かったとして、同期を実行するとB-1への更新が上書きで消えてしまいます。 >どちらかのフォルダーのファイルスタンプが って言葉からすると、問題が発生しそうなパターンですね、おそらく。 念のために書くと、VBだから、VCだからという問題ではなく、マルチスレッドのOSでは問題が発生する可能性の高い設計だからです。 更新頻度が低ければ(数時間に1回など)、まず問題が発生しないだろうとの判断もあり得るとは思いますが。

関連するQ&A

  • Visual Basic 2005 Express Editionとは?

    まったくの未経験者ですが、Visual Basicの学習を始めようとしていまして、市販の「Visual Basic.NET」を買おうかと思っていたのですが、「Visual Basic 2005 Express Edition」が無償でダウンロードできるのを知りました。これは製品版も出ているようですが、「VB6.0」と「VB2005」と「VB.NET」はどのような関係にあるのでしょうか。今、学び始めるなら、どれが一番おすすめなのか知りたいです。また、無償版の「Visual Basic 2005 Express Edition」でも市販のものと比べて機能は制限されているとは思いますが、十分、基本的なプログラミングについては問題なく簡単なソフトなど作成できるのでしょうか。

  • Visual Basic 2005 Express Editionで出来ること

    現在VB6を使用しております。 そろそろ、VersionUpを考えているのですが、Visual Basic 2005 Express Editionでは、VB6の機能はすべて網羅していると考えて大丈夫でしょうか? ADOをつかってmdbファイルへ接続しているのですが、MicrosoftのHPには、SQL Server 2005 Express Edition との接続について書かれているだけで、mdbに関しては明記されていません。 mdbファイルへの接続は可能でしょうか? また、VB6にあって、2005にはないコントロールがあれば教えて下さい。 趣味で個人的に使うプログラムを作っているだけなので、VersionUpに多額の費用は掛けたくありません。 以上、よろしくお願いします。

  • Visual Studio 2008 Express Edition

    現在Windows7 64bitを利用しているのですがVisual C++ 2008 Express Editionを利用してプログラミングを行いたいと考えています. そこでこのVisual Studio 2008 Express Editionには64bit版というものが存在するのでしょうか? 一度試しにインストールしようとしたところ,インストール先のフォルダはProgram File (x86)内にフォルダを作成しようとしていたのですが,インストールするファイルの内容を見たところほとんどの項目に(x64)という記述が見られました.これは64bit版のものをインストールしていると理解して良いのでしょうか? またもし64bit版のソフトであるならばなぜ Program File (x86)がインストール先になったのでしょうか?

  • Microsoft Visual Basic 2008 Express Editionでのコンパイル方法が・・・

    Microsoft Visual Basic 2008 Express Editionでのコンパイル方法がわかりませせん・・・。 exeファイルのつくり方を教えてください。よろしくお願いします。 VB6.0ならわかるのですが・・・orz

  • visual basicについて

    最新のVisual BasicをDLしました。DL先フォルダには 1041, Common7, Microsoft visual basic express edition-JPN , MSDN express library,SDK,VB,VC,xmlというフォルダとインストーラがあります。 肝心のVisual Basicはどこにあるのか分かりません。。。一通り見てみたのですが、どこか他の場所にインストールされたのでしょうか?

  • Visual Studio 2008 Express Edition のイメージ ファイルを DVD に書き込みたい

    こんにちは プログラム勉強のためにVBを勉強中です。 マイクロソフトから提供されている Visual Studio 2008 Express Edition(以下:VS2008SP1)のイメージ ファイル(iso)を DVD に書き込み それからインストールしたいです。 ソフトは CyberLink社のPower2Go(ver 5.502608)です。 できるなら、これ一つで書き込みたいのですが もしかしたら出来ないのでしょうか? よろしくお願いします。

  • Visual Basic 2008 Express Editionで可能ですか?

    以前からVBや、C++など興味があり、 最近不況で業務が少なくなり、この時期だ! とVisualBasic(Ver.6)の勉強をはじめました。 するとインターネット上でVB2008Ex‥Ed…が無償でありました。(2.6MBくらいのファイル) 学習用等には最適とありますが、購入するものと何か機能が不足しているのでしょうか? 質問の履歴検索でいろいろあって結局ちょっとよくわからいのが本音です。 まえおきが長くてすみません。 私がVBでやりたいことは、 PLC(シーケンサ)と232C(又はEthernet)でPLCの内部デバイスにアクセス(読み書き)したいんです。 それと、PLCから読んだデータをCSV形式(というんでしょうか) でファイルに保存して、あとでEXCELなどで編集したい ということです。 Visual Basic 2008 Express Editionで上記なことは可能なのでしょうか。 また、別になにかソフト(ドライバ等)が必要ですか? 初歩的な質問ですみませんが、 宜しくお願いします。

  • Visual Studio Express Editionについて

    プログラムの勉強を初めようと思っております。もちろん初心者です。 簡単なアプリケーションを作れるようになりたいです。 無償のソフトを探していたら、Microsoft Visual C++ 2005 Express Edition を見つけこれでいいかと思い、更に調べてみると同様のソフトで、 Microsoft Visual BASIC 2005 Express Edition、 Microsoft Visual C# 2005 Express Edition、 もある事が分かりました。BASIC、C言語は10年くらい前にかじり程度 勉強しましたが、完全に忘れました。 一から勉強し直すとして、どの言語がお勧めでしょうか? それぞれの良い所、悪い所も教えて頂けるとありがたいです。 ご存知の方いらっしゃいましたら、ご教授お願いします。

  • Microsoft Visual Basic 2008 Express Editionをダウンロードして勉強をしたいのですが、、、。

    Microsoft Visual Basic 2008 Express Editionを無料ダウンロードしました。VBは全くやったことないので勉強しようと本屋さんへ行ったのですが、 ・Visual Basic 6.0 ・Visual Basic.NET ・Visual Basic 2005(少し) しかありませんでした。 ここの店に置いてないだけなのか出版されてないのかわかりません。 (結構大きい本屋さんだったんですが、、、) この3つから代用できるものはありますか? あと基本的な質問ですが 同じVBでもこの3つは構文(コードの書き方)違うんですか? 私がダウンロードした Microsoft Visual Basic 2008 Express Editionは Visual Basic 2005の最新版なのでしょうか? (ちなみにVBAは少し勉強しています。) よろしくお願いします。

  • Visual Basic 2005 Express Edition Beta 2について

    Visual Basic 2005 Express Edition Beta 2を使ってベクターサイトにあるようなフリーソフトを作れるのでしょうか。 どうか教えてください。