VBScript の
GetTempName メソッド。
一時ファイルまたは一時フォルダの名前をランダムに生成して返します。
ということで、今回ランダムなファイルを作るのに使ってたんですが。
たまに同じファイル名が生成されることがあるようですね。
なんらかのロジックで重複しないようになってると思ったんですが・・・考えられる原因として、
・Dual CPU なマシンだから本来起きないはずの「本当に同一時刻」における処理になった
あるいは
・GetTempName は TemporaryFolder 内でのファイルとして使われるのが前提で、TemporaryFolder に存在しないファイル名を返すだけ
とか?完全に推測ですが。
とりあえず、
Dim fso
Dim ts
Set fso =CreateObject("Scripting.FileSystemObject")
On Error Resume Next
Set ts = fso.CreateTextFile(fso.GetTempName(), False)
Do While IsEmpty(fs)
If Err.Number <> 58 Then '「既に同名のファイルが存在しています。」以外
WScript.Echo Err.Description & vbCrLf
Err.Clear
Exit Function
End If
Set ts = fso.CreateTextFile(fso.GetTempName(), False)
Loop
みたいな形で回避。
ちなみにこのせいで周囲巻き込んで徹夜。
もっと詳しい説明ほしかった。
そういえば
CreateTextFile メソッド の
overwrite
省略可能です。既存ファイルの場合に上書きするかどうかを示すブール値を指定します。
上書きする場合は真 (true) を、上書きしない場合は偽 (false) を指定します。
省略した場合は、既存ファイルは上書きされません。
も間違ってたっぽくて、ここでもハマった。
しっかりしてー。>msdn