Что нового

Где находятся временные файлы скрипта?

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
Честно говоря так и не понял как назвать тему.
скрипт для копирования выбранной папки
Код:
#include <file.au3>
$open = FileSelectFolder('','')
Dim $szDrive, $szDir, $szFName, $szExt
$TestPath = _PathSplit($open, $szDrive, $szDir, $szFName, $szExt)
Dim $array[4]
$array[0] = 'C:\Users\Пользователь\Desktop\1\'
$array[1] = 'F:\3\'
$array[2] = 'E:\2\'
$array[3] = 'C:\Users\Пользователь\4\'
For $i =0 To UBound($Array)-1
    $name = StringRegExpReplace($array[$i],'\\','')
    $write = FileOpen(@TempDir & '\' & $name & '.tmp' ,2)
    FileWrite($write,'DirCopy('& "'"& $open & "'"& ',' & "'" & $array[$i] &  $TestPath[3] & "'" &",1)")
    FileClose($write)
    Run(@AutoItExe & ' /AutoIt3ExecuteScript ' & @TempDir & '\' & $name & '.tmp')
Next

в примере указаны пути копирования. для одновременного копирования создаются файлы с функциями AutoIT. по сути должны они быть созданы в папке Temp со своим уникальным именем, которое содержит имя пути без слэша. в папке Temp появляются три файла . имеют имена по имени диска ( у меня в компе три винта). но должно быть четыре файла..по коду видно что четыре пути...и в файлах пусто..до этого были эксперименты, создавались временные файлы. в них можно было прочитать команды..а в этом случае пустые файлы и к тому же их не четыре а три..
объясните - почему так?
система Win 7
скрипт работает. папка копируется в указанные места.
прошу прощения за возможный каламбур в словах, но, как говорится, что вижу то и пишу. :smile:


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

в принципе я нашел причину. все дело в моем плохом знании работы со строками.
вот адекватный рабочий вариант
Код:
#include <file.au3>
$open = FileSelectFolder('','')
Dim $szDrive, $szDir, $szFName, $szExt
$TestPath = _PathSplit($open, $szDrive, $szDir, $szFName, $szExt)
Dim $array[4]
$array[0] = 'C:\Users\Маруся\Desktop\1\'
$array[1] = 'F:\3\'
$array[2] = 'E:\2\'
$array[3] = 'C:\Users\Маруся\4\'
For $i =0 To UBound($Array)-1
	$name = StringRegExpReplace($array[$i],'[\:\\]','')
	MsgBox(0,'',$name)
    $write = FileOpen(@TempDir & '\' & $name & '.tmp' ,2)
    FileWrite($write,'DirCopy('& "'"& $open & "'"& ',' & "'" & $array[$i] &  $TestPath[3] & "'" &",1)")
    FileClose($write)
    Run(@AutoItExe & ' /AutoIt3ExecuteScript ' & @TempDir & '\' & $name & '.tmp')
Next

теперь все как положено - временные файлы в папке Temp с функциями(командами)внутри.
но смешно то, что и первый и второй вариант - рабочие..
вобщем я так и не понял почему вариант 1 работает..куда деваются файлы ...
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Вероятно сюда:
Код:
@TempDir & '\C'
@TempDir & '\F'
@TempDir & '\E'
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
dwerf [?]
а четвертый путь? дело в том, что в папке Temp на диске С появляются три пустых файла..где четвертый?
но как бы там ни было, все копируется без ошибок
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Александр [?]
а четвертый путь? дело в том, что в папке Temp на диске С появляются три пустых файла..где четвертый?
Файл C используется два раза.
Всё дело в двоеточии, в windows оно используется для указания так называемых "альтернативных потоков данных".
Вот здесь вроде бы о них http://habrahabr.ru/blogs/windows/46935/
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
весьма интересно..раньше не читал про альтернативные потоки..сейчас во втором варианте скрипта ( смотри первый пост) сделал маленькое изменение
вместо расширения файла - .tmp
написал так

Код:
$write = FileOpen(@TempDir & '\' & $name & ':tmp' ,2)


и следующая строка

Код:
Run(@AutoItExe & ' /AutoIt3ExecuteScript ' & @TempDir & '\' & $name & ':tmp')

в папке Temp на системном диске появились четыре временных файла, но пустые!!!! :smile:
и при этом копирование папки было выполнено..весьма занимательно. это и есть альтернативный поток?
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Александр [?]
в папке Temp на системном диске появились четыре временных файла, но пустые!!!! и при этом копирование папки было выполнено..весьма занимательно. это и есть альтернативный поток?
Чтобы прочитать содержимое нужно указать название потока, тоесть ":tmp".
Разные потоки - разное содержимое.
Я сам последний раз читал о них несколько лет назад и толком в них не разбираюсь.
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
ладно, если не уходить от темы, то у меня еще вопрос:
скрипт стандартно создаст временный файл с командой внутри - работает 100 процентно..( я надеюсь)
если использовать вариант а-ля альтернативный поток, то есть ли минусы в этом (один из них это работа только с NTFS, как я понял из прочитанных статей). в каком случае скрипт может дать сбой?
 

dwerf

Использует ArchLinux
Сообщения
478
Репутация
219
Александр [?]
если использовать вариант а-ля альтернативный поток, то есть ли минусы в этом (один из них это работа только с NTFS, как я понял из прочитанных статей). в каком случае скрипт может дать сбой?

Может быть при запуске нескольких скриптов из одного файла могут возникнуть проблемы.
Минус - многие программы не умеют работать с альт. потоками, например explorer.

Обычно программы таким образом сохраняют разную информацию о самих файлах. О других применениях я не слышал.
 
Автор
joiner

joiner

Модератор
Локальный модератор
Сообщения
3,570
Репутация
632
вобщем , я выяснил одно - при использовании альтернативного потока ( в моем случае) появляется четыре файла в папке Темп. при просмотре типа пустые, но все таки с информацией, которую мой скрипт видит...
да и если просто написать одну строчку
Код:
Run(@AutoItExe & ' /AutoIt3ExecuteScript ' & @TempDir & '\' & 'E' & ':tmp')

где Е это тот временный файл, который вроде как пустой, но все таки с командой
Код:
DirCopy('C:\Users\Пользователь\Desktop\тестовая','C:\Users\тестовая',1)

которую не видно :smile: в текстовом варианте..да и вообще не видно..происходит выполнение этой команды..

вобщем вот такие пироги...нулевой файл (по объему) на самом деле имеет в себе команду...пипец я для себя открытие сделал.



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

если наглядно показать, то пример такой
Код:
$tmp = FileOpen('123:tmp',2)
FileWrite($tmp,"Msgbox(0,'','привет')")
FileClose($tmp)
Run(@AutoItExe & ' /AutoIt3ExecuteScript ' & '123:tmp')

для проверки стираем в скрипте первые три строки. остается только

Код:
Run(@AutoItExe & ' /AutoIt3ExecuteScript ' & '123:tmp')


опять запускаем и видим результат :smile:


dwerf [?]
О других применениях я не слышал.
писать вирусы
 
Верх