Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] FileSetAttrib: Проблема с рекурсией

Ответить
Настройки темы
[решено] FileSetAttrib: Проблема с рекурсией

Аватара для snoitaleR

Новый участник


Сообщения: 26
Благодарности: 0

Профиль | Отправить PM | Цитировать


Подскажите, пожалуйста, почему не срабатывает рекурсивное изменение атрибутов для всех файлов FARMENU.INI?
Код: Выделить весь код
If Not FileSetAttrib("c:\farmenu.ini", "+HS", 1) Then
    MsgBox(4096,"Error", "Problem setting attributes.")
EndIf
Скрипт выдает сообщение "Problem setting attributes."
Не знаю, где искать ошибку: либо неверно составил скрипт, либо ошибка внутри AUTOIT, либо что-то не так с файловой системой...

Отправлено: 11:05, 10-09-2009

 

Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


ну опять же можно просто заходить скриптом во все папки и проверять наличие нужного файла и выставления нужного атрибута при нахождении

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru


Отправлено: 14:05, 10-09-2009 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата kaster:
Нужно пройтись по всем папкам и подпапкам, найти нужный файл и если он удовлетворяет шаблону (farmenu.ini) ставить ему атрибут »
Тогда уже проще вызвать attrib из ком. строки:

Код: Выделить весь код
If Not _FileSetAttribEx("c:\farmenu.ini", "+HS", 1) Then
    MsgBox(4096, "Error", "Problem setting attributes.")
EndIf

;Флаг = 1 -> Обработка файлов с указанными именами в текущей папке и во всех ее подпапках.
;Флаг = 2 -> Обработка и файлов, и папок.
;Флаги можно совмещать (BitOR(1, 2)).
Func _FileSetAttribEx($sFilePattern, $sAttributes, $iFlag=0)
    Local $sFlags = ""

    $sAttributes = StringRegExpReplace( _
        StringStripWS($sAttributes, 8), _
        "[-+]?([^-+])(?<=([-+])[^-+]|([-+])[^-+]{2}|([-+])[^-+]{3}|([-+])[^-+]{4}|([-+])[^-+]{5}|([-+])[^-+]{6}|([-+])[^-+]{7})", _
        " \2\3\4\5\6\7\8\1")

    If BitAND($iFlag, 1) = 1 Then $sFlags &= " /S "
    If BitAND($iFlag, 2) = 2 Then $sFlags &= " /D "

    Local $iPID = Run(@ComSpec & ' /C Attrib ' & $sAttributes & $sFlags & '"' & $sFilePattern & '"', '', @SW_HIDE, 2)
    Local $iError = @error, $sStdRead = ""

    While ProcessExists($iPID)
        Sleep(10)

        $sStdRead &= StdoutRead($iPID)
        If @error Then ExitLoop
    WEnd

    Return (Number($iError = 0) + Number(StringRegExp($sStdRead, ": \w:\\") = 0) = 2)
EndFunc

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Последний раз редактировалось Creat0R, 14-09-2009 в 13:53. Причина: Поправил функцию

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:26, 10-09-2009 | #12


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата kaster:
можно просто заходить скриптом во все папки и проверять наличие нужного файла »
Это долго.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 14:43, 10-09-2009 | #13


Аватара для kaster

Старожил


Сообщения: 367
Благодарности: 91

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Это долго. »
да, вот такой скрипт
Код: Выделить весь код
#include <File.au3>
$j = 0
$start = TimerInit()
_Setter('c:')
$time = TimerDiff($start) / 1000
MsgBox(0, 'Time', $time & ' seconds elapsed' & @CRLF & $j & ' files scanned')
Func _Setter($sPath)
	Local $aAll = _FileListToArray($sPath)
	If Not IsArray($aAll) Then Return
	For $i = 1 To $aAll[0]
		If _PathIsFolder($sPath & '\' & $aAll[$i]) Then
			$sNew_Path = $sPath & '\' & $aAll[$i]
			;$iTotal_Folders += 1
			_Setter($sNew_Path)
		Else
			$j += 1
			If $aAll[$i] = 'farmenu.ini' Then FileSetAttrib($sPath & '\' & $aAll[$i], '+SH')
		EndIf
	Next
	Return
EndFunc

Func _PathIsFolder($sPath)
	Return StringInStr(FileGetAttrib($sPath), "D")
EndFunc
выполнялся 15 секунд против 5 секунд с этим примером
Код: Выделить весь код
$start = TimerInit()
RunWait(@ComSpec & ' /C attrib +h +s farmenu.url /s', 'c:\', @SW_HIDE)
$time = TimerDiff($start) / 1000
MsgBox(0, 'Time', $time & ' seconds elapsed')
PS: кол-во файлов на диске С у меня ~175 тыс.

-------
Русское сообщество пользователей AutoIt
autoit@conference.jabber.ru - Конференция на jabber.ru

Это сообщение посчитали полезным следующие участники:

Отправлено: 15:27, 10-09-2009 | #14


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата snoitaleR:
Если в одной из вложенных папок файл FARMENU.INI отсутствует, то выдается ошибка и в последующих папках смена атрибутов не производится... »
А вот это уже бага в функции... нужно проверить.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 16:13, 10-09-2009 | #15


Аватара для snoitaleR

Новый участник


Сообщения: 26
Благодарности: 0

Профиль | Отправить PM | Цитировать


Creat0R, kaster, полезные алгоритмы, спасибо...
Иногда бывает необходимость пробежать все папки на диске...

Отправлено: 16:55, 10-09-2009 | #16


Аватара для snoitaleR

Новый участник


Сообщения: 26
Благодарности: 0

Профиль | Отправить PM | Цитировать


Creat0R, проверь, пожалуйста, действительно ли ошибка внутри функции FileSetAttrib, чтобы я уже не сомневался и мог поставить отметку [решено]...

Отправлено: 09:08, 14-09-2009 | #17


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата snoitaleR:
действительно ли ошибка внутри функции FileSetAttrib »
Да, написал баг репорт (тикет № 1176).

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community

Это сообщение посчитали полезным следующие участники:

Отправлено: 13:39, 14-09-2009 | #18


Аватара для snoitaleR

Новый участник


Сообщения: 26
Благодарности: 0

Профиль | Отправить PM | Цитировать


Пока будем использовать альтернативные варианты...
Будем считать тему решенной...

Отправлено: 13:43, 14-09-2009 | #19


Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата snoitaleR:
Пока будем использовать альтернативные варианты »
Я кстати поправил свою функцию выше, спасибо amel27 за RegExp'сы

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 13:55, 14-09-2009 | #20



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] FileSetAttrib: Проблема с рекурсией

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Проблема с IE 6. swr Хочу все знать 5 14-12-2009 16:53
[решено] Проблема с OS XP MastAV Ноутбуки 10 10-11-2009 21:39
2008 - [решено] Проблема с ГП в AD., проблема при создании ГП к отдельным OU kozemit Windows Server 2008/2008 R2 2 15-07-2009 10:52
Разное - [решено] проблема с ие nmn Microsoft Windows 2000/XP 1 01-01-2009 18:47
Интернет - [решено] Проблема с IE AreKs Microsoft Windows 2000/XP 2 21-03-2008 18:02




 
Переход