GetTempName

ランダムに生成された一時ファイルまたはフォルダの名前を文字列(「rad?????.tmp」という形式)で返します。

この関数で返される文字列は完全にランダムのため重複する可能性もあるので、FileExistsで一意のファイル名を取得するなどの対策が必要。

GetTempNameは一時ファイル・フォルダを作成するフォルダのパスを指定していないので、このメソッドだけで重複チェックはできないです。

構文
String = FileSystemObject.GetTempName
引数
戻値
ランダムに生成された一時ファイルまたはフォルダの名前を文字列

一時ファイルのパスを取得するにはGetSpecialFolderを使います。

CONST TemporaryFolder = 2

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM folderspec = FSO.GetSpecialFolder(TemporaryFolder)
DIM path = FSO.BuildPath(folderspec, FSO.GetTempName)

重複チェック

以下はGetTempNameで重複が出るまでの回数を調べるプログラムです。

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")

DIM temp = "D:\Desktop\Temp"

FOR a = 1 TO 10
	FSO.CreateFolder(temp)
	DIM n = 0
	WHILE TRUE
		FUKIDASI(n)
		DIM path = FSO.BuildPath(temp, FSO.GetTempName)
		IF !FSO.FileExists(path) THEN
			FSO.CreateTextFile(path)
			n = n + 1
		ELSE
			BREAK
		ENDIF
		SLEEP(0.01)
	WEND
	PRINT n
	FSO.DeleteFolder(temp, TRUE)
NEXT

以下が上記プログラムを実行した結果を表にしたものです。

回数 重複せず作成された
ファイルの数
1 1197
2 806
3 2158
4 775
5 1809
6 1213
7 1933
8 430
9 656
10 562

最大で2158回、最低で430回と幅がありますが、GetTempNameで繰り返し生成しているといずれ重複してしまいます。

以下は重複しない一時ファイルを生成するプログラムです。大量に作成すると無限ループになる可能性もありますが、普通に使っていればまずそんなことはないと思うので無限ループ対策はしてません。

DIM folderspec = "D:\Desktop\"
REPEAT
	DIM path = FSO.BuildPath(folderspec, FSO.GetTempName)
UNTIL FSO.FileExists(path)

プログラム実行例

一時ファイルの名前を取得

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
MSGBOX(FSO.GetTempName)
  1. script.function.createoleobj(1)
  2. script.function.msgbox(2)
  3. com.fso.gettempname(2)
結果
rad45437.tmp

一時ファイルを作成・削除

CONST TemporaryFolder = 2

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM Folder = FSO.GetSpecialFolder(TemporaryFolder)
DIM path = Folder.Path
DIM name = FSO.GetTempName
path = FSO.BuildPath(path, name)

PRINT path

DIM TextStream = FSO.CreateTextFile(path)
// 現在の日時をファイルに書き込む
TextStream.WriteLine(now())
TextStream.Close

// Tempファイルを削除
// FSO.DeleteFile(path)

FUNCTION now()
	GETTIME()
	RESULT = G_TIME_YY4 + "/" + G_TIME_MM2 + "/" + G_TIME_DD2 + " " + G_TIME_HH2 + ":" + G_TIME_NN2
FEND
  1. script.function.CREATEOLEOBJ(3)
  2. com.FSO.GetSpecialFolder(4)
  3. com.FSO.Folder.Path(5)
  4. com.FSO.GetTempName(6)
  5. com.FSO.BuildPath(7)
  6. com.FSO.CreateTextFile(11)
  7. com.FSO.TextStream(11)
  8. com.FSO.TextStream.WriteLine(13)
  9. com.FSO.TextStream.Close(14)
  10. com.FSO.DeleteFile(17)
結果
D:\TMP\rad83BB3.tmp

csvファイルをHTMLのテーブルデータにする(csvToHTML)

CSVのデータをHTML(テーブル)に変換します。

クリップボードにcsvファイルのパスをコピーして実行します。

CONST TemporaryFolder = 2

DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM Folder = FSO.GetSpecialFolder(TemporaryFolder)
DIM folderspec = Folder.Path
DIM name = FSO.GetTempName
DIM TempPath = FSO.BuildPath(folderspec, name)

DIM path = GETSTR(0)
DIM FID = FOPEN(path, F_READ)
DIM FID2 = FOPEN(TempPath, F_READ OR F_WRITE)
FPUT(FID2, "", F_ALLTEXT)

FOR row = 1 TO FGET(FID, F_LINECOUNT)
	DIM col = 1
	FPUT(FID2, "<#TAB>", 0)
	WHILE FGET(FID, row, col) <> ""
		FPUT(FID2, "<#TAB><#TAB>", 0)
		col = col + 1
	WEND
	FPUT(FID2, "<#TAB>", 0)
NEXT
FPUT(FID2,"
" + (FGET(FID, row, col)) + "
", 0) FCLOSE(FID) FCLOSE(FID2) FID = FOPEN(TempPath, F_READ) SENDSTR(0, FGET(FID, F_ALLTEXT)) PRINT FGET(FID, F_ALLTEXT) FCLOSE(FID)
  1. script.function.CREATEOLEOBJ(3)
  2. com.FSO.GetSpecialFolder(4)
  3. com.FSO.Folder.Path(5)
  4. com.FSO.GetTempName(6)
  5. com.FSO.BuildPath(7)
  6. script.function.GETSTR(9)
  7. script.function.FOPEN(10,11,28)
  8. script.function.FPUT(12,16,18,21,23)
  9. script.function.FGET(14,30)
  10. script.function.FCLOSE(25,26,31)
  11. script.function.SENDSTR(29)