##初期設定 #wifictrl.exeのパス wifictrl = "\Program Files\MyApp\wifictrl_ades\wifictrl.exe" #サーバー側のフルパス(デバイス側からアクセスする場合のパス) ServerDir = "\\MyServer\公開\sync" #デバイス側のフルパス DeviceDir = "\microSDカード\sync" ##初期設定ここまで ## WiFiのレジストリ値 ## #接続完了(AP) WiFiConnect_OK = 19 #オフ WiFiConnect_NO = 1 ##### メイン処理部 ##### ##変数の初期化 TargetDir = "" ArrayServerFileList = "" ArrayDeviceFileList = "" #無線LAN接続 lineOkNGFlg = true CallFunction OnLine, lineOkNGFlg #接続に成功したか判断 If (NOT lineOkNGFlg) Call ExitSync Exit EndIf ## 同期の開始(Server ⇒ Device) ## #サーバー側のフォルダ(相対パス)を取得 TargetDir = ServerDir CallFunction GetDirs, ArrayServerDirList #全ディレクトリにて比較 ForEach DirName in array (ArrayServerDirList) #サーバー側のフォルダ(フルパス) ServerDirPath = ServerDir & DirName #在ると「仮定」するデバイス側のフォルダ(フルパス) DeviceDirPath = DeviceDir & DirName #存在チェック If (NOT DirExists(DeviceDirPath)) #存在していなかったので作成 MkDir(DeviceDirPath) EndIf #サーバー側のファイル一覧取得 TargetDir = ServerDirPath CallFunction GetFiles, ArrayServerFileList #全ファイルを比較 ForEach FileName in array (ArrayServerFileList) #サーバー側のファイル(フルパス) ServerFilePath = ServerDirPath & "\" & FileName #在ると「仮定」するデバイス側のファイル(フルパス) DeviceFilePath = DeviceDirPath & "\" & FileName #デバイス側のファイル存在チェック If (NOT FileExists(DeviceFilePath)) #存在しないためサーバー側からコピー Copy(ServerFilePath, DeviceFilePath, 1) Else #それぞれの最終更新日を取得 ServerFile_ModifyTime = FileModifyTime(ServerFilePath) DeviceFile_ModifyTime = FileModifyTime(DeviceFilePath) #サーバー側が新しい場合のみデバイス側を上書きする If (ServerFile_ModifyTime > DeviceFile_ModifyTime) Copy(ServerFilePath, DeviceFilePath, 1) EndIf EndIf EndForEach EndForEach ## 同期の開始(Device ⇒ Server) ## ##デバイス側のフォルダ(相対パス)を取得 TargetDir = DeviceDir CallFunction GetDirs, ArrayDeviceDirList #全ディレクトリにて比較 ForEach DirName in array (ArrayDeviceDirList) #デバイス側のフォルダ(フルパス) DeviceDirPath = DeviceDir & DirName #在ると「仮定」するサーバー側のフォルダ(フルパス) ServerDirPath = ServerDir & DirName #存在チェック If (NOT DirExists(ServerDirPath)) #存在していなかったので作成 MkDir(ServerDirPath) EndIf #デバイス側のファイル一覧取得 TargetDir = DeviceDirPath CallFunction GetFiles, ArrayDeviceFileList #全ファイルを比較 ForEach FileName in array (ArrayDeviceFileList) #デバイス側のファイル(フルパス) DeviceFilePath = DeviceDirPath & "\" & FileName #在ると「仮定」するサーバー側のファイル(フルパス) ServerFilePath = ServerDirPath & "\" & FileName #サーバー側のファイル存在チェック If (NOT FileExists(ServerFilePath)) #存在しないためデバイス側からコピー Copy(DeviceFilePath, ServerFilePath, 1) Else #それぞれの最終更新日を取得 ServerFile_ModifyTime = FileModifyTime(ServerFilePath) DeviceFile_ModifyTime = FileModifyTime(DeviceFilePath) #デバイス側が新しい場合のみサーバー側を上書きする If (ServerFile_ModifyTime < DeviceFile_ModifyTime) Copy(DeviceFilePath, ServerFilePath, 1) EndIf EndIf EndForEach EndForEach #終了処理 Call ExitSync Exit ##### メイン処理部 ここまで ##### ### ファイル一覧の取得 ### ## TargetDirの階層にあるファイル名を配列で返す Sub GetFiles i = 1 _ArrayFileList = "" ForEach _GetPath in files (TargetDir & "\*.*") _ArrayFileList[i] = SubStr(_GetPath, ReverseFind(_GetPath, "\") + 1, ReverseFind(_GetPath, "\") - 1) i = i + 1 EndForEach Return(_ArrayFileList) EndSub ### ファイル一覧の取得 ここまで ### ### フォルダ一覧の取得 ### Sub GetDirs i = 1 k = 1 _ArrayDirList = "" _Sub_ArrayDirList = "" _Temp_ArrayDirList = "" _ExitFlg = false _FindSubFlg = false #最上位フォルダ _ArrayDirList[i] = "\" i = i + 1 #捜査開始フォルダ _Temp_ArrayDirList[1] = TargetDir #ディレクトリ捜査開始 While (NOT _ExitFlg) #初期化 k = 1 _Sub_ArrayDirList = "" _FindSubFlg = false #この階層に属するフォルダを捜査する ForEach _Temp_DirList in array (_Temp_ArrayDirList) #発見したフォルダのパスは、戻り値用と次の捜査開始用それぞれに保存する ForEach _GetSubDir in directories (_Temp_DirList & "\*") _Sub_ArrayDirList[k] = _GetSubDir k = k + 1 _GetSubDir = "\" & Replace(_GetSubDir, TargetDir & "\", "") _ArrayDirList[i] = _GetSubDir i = i + 1 #一つでもフォルダが見つかったのかを判定 _FindSubFlg = true EndForEach EndForEach #最下層までフォルダを捜査したのか判定 If (NOT _FindSubFlg) #全て捜査し終えたので終了フラグ _ExitFlg = true Else #まだフォルダが存在するので再度捜査 _Temp_ArrayDirList = "" _Temp_ArrayDirList = _Sub_ArrayDirList EndIf EndWhile #発見したフォルダを返す Return(_ArrayDirList) EndSub ### フォルダ一覧の取得 ここまで ### ### 接続処理 ### Sub OnLine #初期設定 _onlineFlg = false _lineOkNGFlg = false _wifiStat = 1 i = 1 #無線LAN接続開始 RunWait(wifictrl, "on") While(NOT _onlineFlg) #5秒待機 Sleep(5000) #接続チェック _wifiStat = RegRead("HKLM", "System\State\Hardware", "WiFi") If (_wifiStat <> WiFiConnect_OK) If (i >= 12) #60秒経過しても接続出来なかったので強制終了 _onlineFlg = true Else i = i + 1 EndIf Else _onlineFlg = true _lineOkNGFlg = true EndIf EndWhile Return(_lineOkNGFlg) EndSub ### 接続処理 ここまで ### ### 終了処理 ### Sub ExitSync #初期設定 _offlineFlg = false _wifiStat = 1 i = 1 #無線LAN接続解除 RunWait(wifictrl, "off") While(NOT _offlineFlg) #5秒待機 Sleep(5000) #接続チェック _wifiStat = RegRead("HKLM", "System\State\Hardware", "WiFi") If (_wifiStat <> WiFiConnect_NO) If (i >= 12) #60秒経過しても接続出来なかったので強制終了 _offlineFlg = true Else i = i + 1 EndIf Else _offlineFlg = true EndIf EndWhile #サスペンド PowerOff EndSub ### 終了処理 ここまで ###