﻿id	summary	reporter	owner	description	type	status	milestone	component	version	severity	resolution	keywords	cc
2234	_TempFile Infinite loop bug	matwachich		"Hi!
Sometimes, _TempFile enters in an infinite loop, because there is no free file name.

I think the _TempFile function should be modified to accept another parameter: Maximum loop number

Here is my modification
{{{
; #FUNCTION# ====================================================================================================================
; Name...........: _TempFile
; Description ...: Generate a name for a temporary file. The file is guaranteed not to exist yet.
; Syntax.........: _TempFile([$s_DirectoryName = @TempDir[, $s_FilePrefix = ""~""[, $s_FileExtension = "".tmp""[, $i_RandomLength = 7]]]])
; Parameters ....: $s_DirectoryName - Optional: Name of directory for filename, defaults to the users %TEMP% directory
;                  $s_FilePrefix    - Optional: File prefixname, defaults to ""~""
;                  $s_FileExtension - Optional: File extenstion, defaults to "".tmp""
;                  $i_RandomLength  - Optional: Number of characters to use to generate a unique name, defaults to 7
;                  $i_MaxLoops		- Optional: Maximum number of random file names to check, default is 100
; Return values .: Success - Filename of a temporary file which does not exist
; Author ........: Dale (Klaatu) Thompson
; Modified.......: Hans Harder - Added Optional parameters
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: Yes
; ===============================================================================================================================
Func _TempFile($s_DirectoryName = @TempDir, $s_FilePrefix = ""~"", $s_FileExtension = "".tmp"", $i_RandomLength = 7, $i_MaxLoops = 100)
	; Check parameters
	If IsKeyword($s_FilePrefix) Then $s_FilePrefix = ""~""
	If IsKeyword($s_FileExtension) Then $s_FileExtension = "".tmp""
	If IsKeyword($i_RandomLength) Then $i_RandomLength = 7
	If Not FileExists($s_DirectoryName) Then $s_DirectoryName = @TempDir ; First reset to default temp dir
	If Not FileExists($s_DirectoryName) Then $s_DirectoryName = @ScriptDir ; Still wrong then set to Scriptdir
	; add trailing \ for directory name
	If StringRight($s_DirectoryName, 1) <> ""\"" Then $s_DirectoryName = $s_DirectoryName & ""\""
	;
	Local $s_TempName, $i_loop = 0
	Do
		$s_TempName = """"
		While StringLen($s_TempName) < $i_RandomLength
			$s_TempName = $s_TempName & Chr(Random(97, 122, 1))
		WEnd
		$s_TempName = $s_DirectoryName & $s_FilePrefix & $s_TempName & $s_FileExtension
		;
		$i_loop += 1
		If $i_loop > $i_MaxLoops Then
			$s_TempName = """"
			ExitLoop
		EndIf
	Until Not FileExists($s_TempName)

	Return $s_TempName
EndFunc   ;==>_TempFile
}}}

Thanks"	Bug	closed		Standard UDFs	3.3.8.1	None	No Bug		
