Что нового

Создание файла, если он еще не существует

nu3dell

Осваивающий
Сообщения
139
Репутация
24
Если файл, test.txt существует то создается файл test_1.txt, если файл test_1.txt есть то создается test_2.txt. Ну и так далее
 

armenxxx1

Продвинутый
Сообщения
155
Репутация
56
Код:
Dim $i

While 1
    $i += 1
	If FileExists(@ScriptDir & "\test" & $i & ".txt") Then
		$i += 1
		$handle = FileOpen(@ScriptDir & "\test" & $i & ".txt", 1)
		FileClose($handle)
	Else
		$handle = FileOpen(@ScriptDir & "\test" & $i & ".txt", 1)
		FileClose($handle)
	EndIf
	Sleep(5000)
WEnd
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Код:
$Path = @ScriptDir

$Count = 1
Do
	$File = $Path & '\test_' & $Count & '.txt'
	$Count += 1
Until Not FileExists($File)

ConsoleWrite($File & @CR)
 
Автор
nu3dell

nu3dell

Осваивающий
Сообщения
139
Репутация
24
armenxxx1 в вашем примере только создает до 2
Yashied у вас только 1 файл максимум
 

AZJIO

Меценат
Меценат
Сообщения
2,878
Репутация
1,194
nu3dell
Код:
$sPathDir='C:\WINDOWS\'
$sFile='test'
$sExt='.txt'

If FileExists($sPathDir&$sFile&$sExt) Then
	$i = 0
	Do
		$i+=1
		$sTmp=$sPathDir&$sFile&'_'&$i&$sExt
	Until Not FileExists($sTmp)
	$sPath=$sTmp
Else
	$sPath=$sPathDir&$sFile&$sExt
EndIf

$hFile = FileOpen($sPath, 2)
FileWrite($hFile, '1')
FileClose($hFile)


Есть ещё такое
Код:
$sPath=_Path(@ScriptDir&'\file.txt')

$hFile = FileOpen($sPath, 2)
FileWrite($hFile, '1')
FileClose($hFile)


;@AZJIO
Func _Path($sPath)
	Local $i, $sName, $sDir, $sExt
	If FileExists($sPath) Then
		$i=StringInStr($sPath, '\', 0, -1)
		$sName = StringTrimLeft($sPath, $i)
		$sDir = StringLeft($sPath, $i)
		If StringInStr($sName, '.') Then
			$i=StringInStr($sName, '.', 0, -1)-1
			$sExt = StringTrimLeft($sName, $i) ; получить расширение файла
			$sName = StringLeft($sName, $i) ; получить имя файла без расширения
		Else
			$sExt = ''
		EndIf
		; цикл проверки одноимённых файлов
		$i = 0
		Do
			$i+=1
			If $i = 1 Then
				$sPath=$sDir&$sName& ' Копия' & $sExt
			Else
				$sPath=$sDir&$sName & ' Копия (' & $i & ')' & $sExt
			EndIf
		Until Not FileExists($sPath)
	EndIf
	Return $sPath
EndFunc



Добавлено:
Сообщение автоматически объединено:

nu3dell
Кстати, готовый вариант оформленный в виде функции, тот что тебе нужно

Код:
$sPath=_Path(@ScriptDir&'\file.txt')

$hFile = FileOpen($sPath, 2)
FileWrite($hFile, '1')
FileClose($hFile)

Func _Path($sPath)
	Local $i, $sName, $sDir, $sExt
	If FileExists($sPath) Then
		$i=StringInStr($sPath, '\', 0, -1)
		$sName = StringTrimLeft($sPath, $i)
		$sDir = StringLeft($sPath, $i)
		If StringInStr($sName, '.') Then
			$i=StringInStr($sName, '.', 0, -1)-1
			$sExt = StringTrimLeft($sName, $i)
			$sName = StringLeft($sName, $i)
		Else
			$sExt = ''
		EndIf
		$i = 0
		Do
			$i+=1
			$sPath=$sDir&$sName& '_' & $i & $sExt
		Until Not FileExists($sPath)
	EndIf
	Return $sPath
EndFunc
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Рекомендую использовать это:

Код:
$sFile = @DesktopDir & '\' & _FileNewNameEx("test.txt", @DesktopDir, -1, '_')
FileWrite($sFile, '')

Func _FileNewNameEx($sFileName, $sDir, $iExt_Mod = -1, $sDelim1 = -1, $sDelim2 = -1)
	If Not StringInStr(FileGetAttrib($sDir), "D") Then Return $sFileName
	If Not FileExists($sDir & "\" & $sFileName) Then Return $sFileName
	
	$sDir = StringRegExpReplace($sDir, "\\ *$", "")
	
	Local $sName = StringRegExpReplace($sFileName, "\.[^.]*$", "")
	If $iExt_Mod <> -1 Then $sName = StringRegExpReplace($sFileName, "\.[^.]*(\.[^.]*$|$)", "")
	
	If $sDelim1 = -1 Then $sDelim1 = " ("
	If $sDelim2 = -1 And $sDelim1 = -1 Then $sDelim2 = ")"
	
	If $sDelim1 <> -1 And $sDelim2 = -1 Then $sDelim2 = ''
	
	Local $sDelim1_RE = StringRegExpReplace($sDelim1, '([][{}()|.?+*\\^])', '\\\1')
	Local $sDelim2_RE = StringRegExpReplace($sDelim2, '([][{}()|.?+*\\^])', '\\\1')
	
	Local $iDelim_Num = StringRegExpReplace($sName, ".*" & $sDelim1_RE & "(.*)" & $sDelim2_RE & ".*$", "\1")
	If @extended = 0 Then $iDelim_Num = 0
	
	$iDelim_Num = Number($iDelim_Num)
	
	Local $sExtn = StringRegExpReplace($sFileName, "^.*\.", ".")
	If @extended = 0 Then $sExtn = ""
	
	Local $iCount = $iDelim_Num + 1, $sRet_FileName = $sFileName
	
	While FileExists($sDir & "\" & $sRet_FileName)
		If $iDelim_Num > 0 Then
			$sRet_FileName = StringRegExpReplace($sRet_FileName, "(.*)" & $sDelim1_RE & $iDelim_Num & $sDelim2_RE, "\1" & $sDelim1 & $iCount & $sDelim2)
			$iDelim_Num += 1
		Else
			If $sDelim1 <> -1 And $sDelim2 <> -1 Then
				$sRet_FileName = $sName & $sDelim1 & $iCount & $sDelim2 & $sExtn
			ElseIf $sDelim1 <> -1 And $sDelim2 = -1 Then
				$sRet_FileName = $sName & $sDelim1 & $iCount & $sExtn
			EndIf
		EndIf
		
		$iCount += 1
	WEnd
	
	Return $sRet_FileName
EndFunc
 
Верх