StdioClose
Закрывает все ресурсы, связанные с процессом ранее запущенным с STDIO перенаправлением.
StdioClose ( process_id )
Параметры
process_id | Идентификатор дочернего процесса (PID), возвращённый предыдущим вызовом функции Run. |
Возвращаемое значение
Успех: | Возвращает значение неравное 0. |
Ошибка: | Возвращает 0, если процесс не имел STDIO перенаправление или был уже закрыт. |
Примечания
Эта функция закрывает все дескрипторы и освобождает все ресурсы, связанные с STDIO. Это сделает невозможным более читать STDIO данные из процесса. Любые незавершённые данные будут потеряны.См. также
StdoutRead, StderrRead, StdinWrite, Run, RunAsПример
#include <Array.au3> ; для _ArrayDisplay.
#include <Constants.au3>
; Рекурсивно выдавать список файлов каталога.
Example()
Func Example()
Local $sFilePath = @ScriptDir ; Поиск в текущем каталоге со скриптами.
Local $sFilter = "*.*" ; Поиск всех файлов в текущем каталоге. Правильный формат маски поиска ищите по слову 'Wildcards' в текущей справке.
Local $sOutput = "" ; Переменная для хранения вывода StdoutRead.
; Если указанный путь не является каталогом, то выход из функции.
If Not StringInStr(FileGetAttrib($sFilePath), "D") Then
Return SetError(1, 0, 0)
EndIf
; Удаляет завершающие слеши и добавляет один обратный слеш в конце.
$sFilePath = StringRegExpReplace($sFilePath, "[\\/]+\z", "") & "\"
#cs
Параметры ком-строки для DIR:
/B - вывод только имен.
/A-D - поиск всех файлов, без папок.
/S - поиск в подкаталогах.
#ce
Local $iPID = Run(@ComSpec & ' /C DIR "' & $sFilePath & $sFilter & '" /B /A-D /S', $sFilePath, @SW_HIDE, $STDOUT_CHILD)
; Закрывает поток Stdio используя PID возвращённый функцией Run. Это вызывает диалоговое окно из-за невозможности читать поток stdout.
StdioClose($iPID) ; закомментируйте эту строку, чтобы увидеть результаты
While 1
$sOutput &= StdoutRead($iPID) ; Читает Stdout поток используя PID возвращённый функцией Run.
If @error Then ; Выход из цикла, если процесс завершён или StdoutRead возвращает ошибку.
ExitLoop
EndIf
WEnd
; Используется StringSplit для разделения результатов вывода StdoutRead в массив. Удаляются все символы @CR, а @LF используется как разделитель.
Local $aArray = StringSplit(StringTrimRight(StringStripCR($sOutput), StringLen(@LF)), @LF)
If @error Then
MsgBox(4096, "", "Произошла ошибка при попытке найти все файлы в текущем каталоге скриптов.")
Else
; Вывод результатов.
_ArrayDisplay($aArray)
EndIf
EndFunc