(for Internet Explorer)
← ▼ ▲
↑
CanAttachFriendPatchAndBackUpDictionary
Set patch_A = EnumerateToPatchAndBackUpDictionary( "PatchA" )
Set patch_B = EnumerateToPatchAndBackUpDictionary( "PatchB" )
state = CanAttachFriendPatchAndBackUpDictionary( patch_A, "Target\A", patch_B, "Target\B" )
If state = c.MustAttachAfterFriend or state = c.MustMergeWithFriend Then
Set patch = patch_A.Copy()
MergePatchAndBackUpDictionary patch, "Target\A", patch_B, "Target\B"
End If
Function CanAttachFriendPatchAndBackUpDictionary( _
in_AttachingPatch as PatchAndBackUpDictionaryClass, in_TargetRootPathOfAttaching as string, _
in_FriendPatch as PatchAndBackUpDictionaryClass, in_TargetRootPathOfFriend as string ) as integer
しなければならないかどうかを調べます。
【引数】
in_AttachingPatch
in_FriendPatch
先にアタッチするパッチA
後でアタッチするパッチF
サンプル
CanAttachFriendPatchAndBackUpDictionary
ソース
→ ToolsLib.vbs
テスト
→ T_LeafPath.vbs
T_PatchAndBackUp_Merge
MergePatchAndBackUpDictionary
複数のパッチをあてるときに
返り値
調べた結果（下記）
c.MustAttachAfterFriend
c.CannotAttachBoth
c.MustMergeWithFriend
パッチA とパッチF の両方をアタッチすることはできません
パッチA とパッチF の両方をアタッチするには、先にパッチF をあてるか、
返り値について
c.Attachable
パッチA とパッチF の両方をアタッチすることができます
パッチA とパッチF の両方をアタッチするには、
MergePatchAndBackUpDictionary
する必要があります
する必要があります
MergePatchAndBackUpDictionary
下記のいずれかが返ります。 なお、c = get_ToolsLibConsts() です。
in_TargetRootPathOfAttaching
Empty または、in_AttachingPatch パッチをあてる対象フォルダーのパス
in_TargetRootPathOfFriend
Empty または、in_FriendPatch パッチをあてる対象フォルダーのパス
→ MergePatchAndBackUpDictionary
in_TargetRootPathOfAttaching, in_TargetRootPathOfFriend 引数について
参考
の in_TargetRootPathOfDestination 引数の説明
in_TargetRootPathOfAttaching と in_TargetRootPathOfFriend に配列を指定することもできます。
← ▼ ▲
AttachPatchAndBackUpDictionary
ソース
→ ToolsLib.vbs
Sub AttachPatchAndBackUpDictionary(
in_out_LeafPathDictionary as dictionary of NameOnlyClass,
in_PatchAndBackUpDictionary as PatchAndBackUpDictionaryClass or string,
in_RootPathInLeafPath as string, _
in_out_Options as boolean or ThreeWayMergeOptionClass )
<< PatchAndBackUpDictionaryClass
パッチをあてるように、ファイルの一覧を変更します
【引数】
in_out_LeafPathDictionary
変更されるファイル パスの一覧
in_RootPathInLeafPath
テスト
→ T_LeafPath.vbs
T_LeafPath
in_PatchAndBackUpDictionary
in_out_Options
→ LeafPathDictionary
パッチを当てる対象のルートのパス
→ PatchAndBackUpDictionaryClass
パッチ（パッチ ファイルの一覧）
オプション（下記）、通常 True
バックアップ ファイルが同じ内容かどうかを調べるのに、
を使っています。
g_FileHashCache
T_LeafPath_CheckBackUp
in_PatchAndBackUpDictionary 引数に文字列型の値を指定すると、内部で
EnumerateToPatchAndBackUpDictionary
を呼び出します。
T_PatchAndBackUp
CopyFilesToLeafPathDictionary
ファイルのコピーを実際にするときは、AttachPatchAndBackUpDictionary で変更した後（変数の中でパッチを
を呼び出します。 その関数の中で、
あてた後）
in_out_LeafPathDictionary 引数に値が Empty の変数を指定すると、その変数に
LeafPathDictionary
が格納されます。 in_RootPathInLeafPath が指すフォルダーに、in_PatchAndBackUpDictionary のパッチを
あてたファイルの一覧が格納されます。 そのキーとアイテムには、フル パスが格納されます。
ThreeWayMerge
を行います。
→ T_ModuleAssort.vbs
T_LeafPathMerge
in_out_Options に boolean 型を指定したときは、バックアップ ファイルが同じ内容でなければエラーにするか
どうかを指定したことになります。 True を指定すると、バックアップにあるファイルが対象のフォルダーに
ないときでもエラーになります。
ThreeWayMergeOptionClass
を指定することもできます。
→ CopyFilesToLeafPathDictionary のテスト
手動でパッチをあてるときは、
UpdateModule コマンド
を使います。
in_out_LeafPathDictionary 引数と in_PatchAndBackUpDictionary 引数のキーとアイテムには、フル パスを
格納しておいてください。
→ EnumerateToPatchAndBackUpDictionary のサンプル
サンプル
バックアップ ファイルがあるフォルダーに対応するプロジェクト内のフォルダーと、パッチ ファイルがある
フォルダーに対応するプロジェクト内のフォルダーが異なるときは、
ChangeKeyOfPatchAndBackUpDictionaryToTarget
の in_TargetPath 引数に配列を指定することで、
プロジェクト内のフォルダーをそろえてください。
参考
→ SyncFilesX を内部で使うツールとの比較
← ▼ ▲
タブ文字
ChangeHeadSpaceToTab
行頭の空白文字をタブ文字に変換します
テスト
→ T_ChangeTabSpace フォルダ
ChangeHeadTabToSpace
ChangeMiddleSpaceToTab
ChangeMiddleTabToSpace
行頭のタブ文字を空白文字に変換します
行頭以外の空白文字をタブ文字に変換します
行頭以外のタブ文字を空白文字に変換します
← ▼ ▲
ChangeHeadSpaceToTab
Sub ChangeHeadSpaceToTab( ReadStream as TextStream, WriteStream as TextStream,
TabSize as integer )
行頭の空白文字をタブ文字に変換します。
【引数】
ReadStream
WriteStream
変換前のテキスト・ファイル・ストリーム
変換後のテキスト・ファイル・ストリーム
TabSize
１つのタブ文字あたりの空白文字の数
ToolsLib.vbs (src)
→ StartReplaceObj::r
→ StartReplaceObj::w
← ▼ ▲
ChangeHeadTabToSpace
Sub ChangeHeadTabToSpace( ReadStream as TextStream, WriteStream as TextStream,
TabSize as integer )
行頭のタブ文字を空白文字に変換します。
【引数】
ReadStream
WriteStream
変換前のテキスト・ファイル・ストリーム
変換後のテキスト・ファイル・ストリーム
TabSize
１つのタブ文字あたりの空白文字の数
ToolsLib.vbs (src)
→ StartReplaceObj::r
→ StartReplaceObj::w
サンプル
Set rep = StartReplace( "in\sample.c", "out\sample.c", True )
ChangeHeadTabToSpace rep.r, rep.w, 4
rep.Finish
← ▼ ▲
ChangeMiddleSpaceToTab
Sub ChangeMiddleSpaceToTab( ReadStream as TextStream, WriteStream as TextStream,
TabSize as integer )
行頭以外の空白文字をタブ文字に変換します。
【引数】
ReadStream
WriteStream
変換前のテキスト・ファイル・ストリーム
変換後のテキスト・ファイル・ストリーム
TabSize
１つのタブ文字あたりの空白文字の数
ToolsLib.vbs (src)
→ StartReplaceObj::r
→ StartReplaceObj::w
← ▼ ▲
ChangeMiddleTabToSpace
Sub ChangeMiddleTabToSpace( ReadStream as TextStream, WriteStream as TextStream,
TabSize as integer )
行頭以外のタブ文字を空白文字に変換します。
【引数】
ReadStream
WriteStream
変換前のテキスト・ファイル・ストリーム
変換後のテキスト・ファイル・ストリーム
TabSize
１つのタブ文字あたりの空白文字の数
ToolsLib.vbs (src)
→ StartReplaceObj::r
→ StartReplaceObj::w
← ▼ ▲
SetBreakByPath （デバッグ）
Sub SetBreakByFName( in_Path as string )
指定した名前のファイルをライトするときにブレークさせます。
【引数】
in_Path
ブレークするファイル名
g_debug ≧ 1 のときだけブレークします。
vbslib の関数（copy、del、OpenForWrite など）ではない（g_fs.CopyFile など）関数によって
ライトしたときはブレークしません。
→ T_Debug フォルダ
テスト
SetBreakByFName "Out.txt" '// TODO:
→ SetupDebugTools
関連
SetBreakByFName （デバッグ）
Sub SetBreakByPath( in_Path as string, in_Count as integer )
in_Count
何回目のライトでブレークするか。 Empty = 毎回
サンプル
ソース
→ vbslib.vbs
← ▼ ▲
IsWriteAccessDenied
(src)
Function IsWriteAccessDenied( ErrNumber as integer, Path as string,
FolderOrFile as bitfield, in_out_nRetry as integer )
負荷が高いときに発生する書き込み拒否エラーに対処します。
【引数】
ErrNumber
チェックするエラーコード
返り値
書き込み拒否エラーが発生したかどうか
<WARNING msg="書き込みできません。" msg2="再試行しています" retry_count="1"
path="C:\folder\file.txt"/>
VBScript (Windows) では、ファイルがロックされたときだけでなく、ディスク・アクセスの負荷が
高くなると、書き込み拒否エラー(エラーコード 70)が発生します。 このエラーに対処しないと、
スクリプトによる自動実行が中断されてしまいます。 IsWriteAccessDenied は、書き込み拒否
エラーによってスクリプトが中断されないように、再試行するスクリプトの記述を補助します。
コマンドプロンプト(cscript.exe)で動く vbslib で、書き込み拒否エラーが発生したら、
次の警告を表示して、グローバル変数 g_FileSystemRetryMSec に指定した時間（ミリ秒）
（通常4秒）だけ Sleep します。 グローバル変数 g_FileSystemMaxRetryMSec に指定した
時間（ミリ秒）（通常60秒）だけ再試行したら、書き込み拒否エラーを発生させます。
再試行は、IsWriteAccessDenied の内部では行いません。 参考：下記サンプル。
ウィンドウ(wscript.exe)で動く vbslib で、書き込み拒否エラーが発生したら、次の警告を
表示して [ 再試行 ] か [ キャンセル ] を選ぶメッセージボックスが表示されます。
ユーザーが入力するまで自動実行は一時停止します。
書き込みできません。
[再試行] [キャンセル]
アクセスしたパス
（入出力） 再試行回数
Path
in_out_nRetry
Dim f, path, n_retry, en, ed
n_retry = 0
Do
On Error Resume Next
Set f = g_fs.CreateTextFile( path )
en = Err.Number : ed = Err.Description : On Error GoTo 0
If not IsWriteAccessDenied( en, path, F_File, n_retry ) Then Exit Do
Loop
If en <> 0 Then Err.Raise en,,ed
サンプル： 高負荷状態でも使える CreateTextFile
path
path
再試行ユーザーインターフェース
→ E_WriteAccessDenied
参考
FolderOrFile
F_File または F_Folder または F_File or F_Folder
テスト
→ T_Replace_target.vbs # T_FromLock
→ T_Copy.vbs # T_CopyLocked
→ T_File.vbs # T_OverwriteFolderFile
キーワード：
g_FileSystemMaxRetryMSec
g_FileSystemRetryMSec
書き込み拒否エラー(エラーコード 70)が発生する可能性があるものの例
g_fs.CopyFile, g_fs.CopyFolder, g_fs.MoveFile, g_fs.MoveFolder
g_fs.DeleteFolder, g_fs.CreateFolder
g_fs.CreateTextFile, g_fs.OpenTextFile
File::Name への代入による改名, ADODBStream::SaveToFile
vbslib が提供するファイル操作機能は、書き込み拒否エラーが発生しないように対処されて
いるため、IsWriteAccessDenied を呼び出す必要はありません。
→ ファイルの負荷が高いとスクリプトが中断してしまう Windows (Web)
→ T_File_w_Manually.vbs
→ T_File_c_Manually.vbs
← ▼ ▲
SetReadOnlyAttribute
SetReadOnlyAttribute "C:\Folder", False
指定のファイル、または、指定のフォルダーの中にあるすべてのファイルの、読み取り専用属性を変更します。
【引数】
in_Path
読み取り専用属性を変更するファイルが入ったフォルダーのフォルダーのパス
サンプル
Sub SetReadOnlyAttribute( in_Path as string or Folder or File, in_IsReadOnly )
読み取り専用属性を変更するファイルのパス
File オブジェクト
Folder オブジェクト
読み取り専用属性を変更するファイルが入ったフォルダーの
読み取り専用属性を変更する
ソース
→ vbslib.vbs
関連
→ GetReadOnlyList
→ File::Attributes
テスト
→ T_File.vbs
T_GetReadOnlyList
← ▼ ▲
SetFilesToReadOnly
SetFilesToReadOnly "C:\Folder"
Sub SetFilesToReadOnly( in_Folder as string or Folder )
フォルダーの中にあるすべてのファイルを、読み取り専用にします。
【引数】
in_Folder
読み取り専用に設定するファイルが入ったフォルダーの
関連
サンプル
ソース
→ SetFilesToNotReadOnly
→ vbslib.vbs
Folder オブジェクト
→ File::Attributes
→ GetReadOnlyList
→ SetFileToReadOnly
→ SetFileToNotReadOnly
→ SetReadOnlyAttribute
注意
この仕様は削除される予定です。 代わり
← ▼ ▲
SetFilesToNotReadOnly
SetFilesToNotReadOnly "C:\Folder"
Sub SetFilesToNotReadOnly( in_Folder as string or Folder )
フォルダーの中にあるすべてのファイルを、読み取り専用ではなくします。
【引数】
in_Folder
読み取り専用を解除するファイルが入ったフォルダーの
関連
サンプル
ソース
→ vbslib.vbs
Folder オブジェクト
→ SetFilesToReadOnly
→ SetReadOnlyAttribute
注意
この仕様は削除される予定です。 代わり
← ▼ ▲
SetFileToReadOnly
SetFileToReadOnly "C:\Folder\File.txt"
Sub SetFileToReadOnly( in_File as string or File )
ファイルを読み取り専用にします。
【引数】
in_File
読み取り専用に設定する
関連
サンプル
ソース
→ vbslib.vbs
File オブジェクト
→ SetFilesToReadOnly
→ SetFileToNotReadOnly
→ SetReadOnlyAttribute
注意
この仕様は削除される予定です。 代わり
← ▼ ▲
SetFileToNotReadOnly
SetFileToNotReadOnly "C:\Folder\File.txt"
Sub SetFileToNotReadOnly( in_File as string or File )
ファイルを読み取り専用ではなくします。
【引数】
in_File
読み取り専用を解除する
関連
サンプル
ソース
→ vbslib.vbs
File オブジェクト
→ SetFileToReadOnly
→ SetFilesToReadOnly
→ SetReadOnlyAttribute
注意
この仕様は削除される予定です。 代わり
← ▼ ▲
BinaryArray クラス、バイナリーファイル
バイナリー・ファイルのデータを扱いやすくするクラスです。
ファイルを配列のように扱うことができます。
関連
→ Byte 配列 (VBScript)
Set bin = new BinaryArray
bin.Size = 4
bin(0) = &hFF '// low byte of BOM
bin(1) = &hFE '// high byte of BOM
bin(2) = &h80 '// low byte of hiragana mu
bin(3) = &h30 '// high byte of hiragana mu
bin.Save "unicode_sample.txt"
サンプル
バイナリーファイルへライト。 Unicode 形式のテキストファイル 「む(=0x3080)」 を作る
Set bin = ReadBinaryFile( "unicode_sample.txt" )
If bin(0) = &hFF and bin(1) = &hFE Then
echo "This is unicode file."
End If
バイナリーファイルからリード。Unicode 形式のテキストファイルかどうか判定する
メンバー
Set bin = new BinaryArray
bin.Load "unicode_sample.txt"
strbin = bin.Read( Empty, Empty )
strbin = LeftB( strbin, 2 ) + ChrB( &h6F ) + ChrB( &h30 ) + MidB( strbin, 3 )
bin.Write strbin, 0, Empty
bin.Save "unicode_sample.txt"
バイナリーファイルの変更。 Unicode テキスト・ファイルの先頭に 「は(=0x306F)」 を追加する
LeftB, MidB, RightB, LenB, AscB, ChrB は、文字列操作関数のバイナリ版です。
ファイル：
System.vbs
配列の要素。 配列番号。 （デフォルト・プロパティ）
.Item
.Size
.Load
.Save
.Read
.Write
.ToEmpty
.Length
.Count
.ReDim_
.UBound_
配列の要素数。 バイト・サイズ
配列の要素数。 バイト・サイズ
配列の要素数。 バイト・サイズ
配列の要素数を変更します。 ReDim Preserve と同じです。
ファイルの内容を、配列に入力します。
配列の内容を、ファイルに出力します。
配列の内容の一部を、Byte 配列にして返します。
配列の内容の一部を、変更します。
配列を空にします。 配列要素数は 0 になります。
配列の最大要素番号を返します。
配列のすべての要素を文字列にします。 ダンプします。
テスト
→ T_Binary フォルダ
(src)
.ReadStruct
.WriteStruct
.xml
配列の内容の一部を、構造化した辞書を取得します。
構造化した配列を使って、バイナリ配列の内容の一部にライトします。
Dim bin, out, size
bin.Write &h10, Empty, Array( &h12, &h34, &h56, &h78, &h9A, &hBC, &hDE )
size = bin.ReadStruct( &h10, out, Array( "a", vbByte, "b", vbInteger+vbArray, 3 ) )
'// out("a") = &h12
'// out("b")(0) = &h5634
'// out("b")(1) = &h9A78
'// out("b")(2) = &hDEBC
バイナリーファイルを構造化してリードする
.ReadStruct
.Read
.Write
.Save
.Load
.Write
.Size
.Save
.WriteFromBinaryArray
配列の内容の一部をコピーします。
ReadBinaryFile
Set bin = new_BinaryArray( Array( &h42, &h4D ) )
バイナリーデータを作成する
関連
→ OpenForReadRIFF
→ OpenForWriteRIFF
→ ADODB.Stream
バイナリーデータをダンプ表示する
echo_v new_BinaryArrayAsText( "漢字", Empty ).xml
.WriteFromDump
← ▼ ▲
new_BinaryArray
Set bin = new_BinaryArray( Array( &h42, &h4D ) )
Function new_BinaryArray( IntegerArray as array of integer ) as BinaryArray
バイナリ配列を生成します。
【引数】
IntegerArray
バイナリーの内容に相当する配列。 数値型または
返り値
生成されたバイナリ配列
関連
サンプル
ソース
→ ReadBinaryFile
→ System.vbs
Byte 配列
binary = bin_1.Read( &h10, &h28 )
echo_v GetEchoStr( new_BinaryArray( binary ) )
← ▼ ▲
new_BinaryArrayFromFile
Function new_BinaryArrayFromFile( Path as string ) as BinaryArray
バイナリ・ファイルからバイナリ配列を生成します。
【引数】
Path
バイナリ・ファイルのパス
返り値
生成されたバイナリ配列
ソース
→ System.vbs
関連
→ Load (BinaryArray)
→ ReadBinaryFile
← ▼ ▲
new_BinaryArrayFromBase64
Set bin = new_BinaryArrayFromBase64( "EjRWeA==" )
Function new_BinaryArrayFromBase64( Base64_Text as string ) as BinaryArray
Base64 でエンコードされた文字列からバイナリ配列を生成します。
【引数】
Base64_Text
Base64 でエンコードされた文字列
返り値
生成されたバイナリ配列
サンプル
ソース
→ System.vbs
テスト
→ T_Binary.vbs
Test_of_Base64
関連
→ Base64 (BinaryArray)
← ▼ ▲
new_BinaryArrayAsText
Set bin = new_BinaryArrayAsText( "漢字", "EUC-JP" )
Function new_BinaryArrayAsText( Text as string, CharacterSet as string ) as BinaryArray
文字列から指定した文字コードセットのバイナリ・データを持つバイナリ配列を生成します。
【引数】
Text
文字列
CharacterSet
文字コードセット、Empty を指定すると "Unicode"
サンプル
ソース
→ System.vbs
テスト
→ T_Binary.vbs
T_Binary_TextCharacterSet
関連
→ Text (BinaryArray)
生成されたバイナリ配列
返り値
→ new_TextFileCharSetStack
文字コードセット一覧
EUC-JP 形式の文字列が格納されたバイナリ配列を生成します。
サンプル
文字列の中のすべての文字コード（Unicode）を表示します。
echo_v new_BinaryArrayAsText( "漢字", Empty ).xml
→ AssertString
文字列が異なっていたら Diff ツールを開きます
Unicode の場合、バイナリ配列の先頭に BOM (FF FE) が入ります。
← ▼ ▲
Item、配列番号 (BinaryArray)
Default Property BinaryArray::Item( i as integer ) as integer
配列番号を使って、バイナリ配列の要素を参照します。 （デフォルト・プロパティ）
【引数】
i
配列の要素の番号。 先頭は 0
Dim bin : Set bin = new BinaryArray
bin.Load "a.bin"
echo bin(0) '// bin.Item(0) と同じ
bin(0) = &h30
サンプル
bin(0)
bin(0)
(src)
１バイトずつアクセスします。
← ▼ ▲
Size, Length, Count (BinaryArray)
Property BinaryArray::Size as integer
Property BinaryArray::Length as integer
Property BinaryArray::Count as integer
バイナリ配列の要素数。 バイト・サイズ
値を設定すると、配列のサイズが変化します。
大きくなった部分の値は、0x00 になります。
小さくなった部分は削除されます。
Dim bin : Set bin = new BinaryArray
bin.Load "a.bin"
bin.Size = bin.Size + 1
bin.Save "a_plus1.bin"
サンプル
Size
Size
←
↓