Автор Тема: FileFindNextFile находит то чего нет и не видит то что есть  (Прочитано 4860 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zumers [?]

  • Новичок
  • *
  • Сообщений: 8
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Нижеприведенный код при поиске в папке system32 находит 13780 файлов, когда подсчет через проводник или TotalComander находит 16552, а в папке Users наоборот 20785 и 17706 соответственно  :stars:
Код: AutoIt [Выделить]
#include <Array.au3>
$sFileList = ""
__FO_FileSearchAll($sFileList, "D:\")
$sFileList = StringSplit($sFileList, @CRLF, 1)
_ArrayDisplay($sFileList, 'все файлы')
Func __FO_FileSearchAll(ByRef $sFileList, $sPath)
    Local $sFile, $s = FileFindFirstFile($sPath & '*')
    If $s = -1 Then Return
    While 1
        $sFile = FileFindNextFile($s)
        If @error Then ExitLoop
        If @extended Then
            __FO_FileSearchAll($sFileList, $sPath & $sFile & '\')
        Else
            $sFileList &= $sPath & $sFile & @CRLF
        EndIf
    WEnd
    FileClose($s)
EndFunc


Плюс к сказанному вижу в проводнике файл (могу скопировать, просмотреть свойства и т.д.) C:\Windows\System32\acmigration.dll, но при выполнении:
Код: AutoIt [Выделить]
if FileExists("C:\Windows\System32\acmigration.dll") Then MsgBox(0, "","Нашел")

... тишина. Может кто пояснить в связи с чем так получается?

Русское сообщество AutoIt


Помечен как лучший ответ пользователем zumers Отправлен Август 13, 2015, 12:15:21

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2019
  • Репутация: 442
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
у вас же винда 64 битная?


Добавлено: Август 13, 2015, 11:57:09
http://autoit-script.ru/index.php?topic=13419.msg85477 вот тема, почитай разберись.
« Последнее редактирование: Август 13, 2015, 11:57:09 от inververs, Причина: Объединение сообщений »

Оффлайн zumers [?]

  • Новичок
  • *
  • Сообщений: 8

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Извиняюсь, хотел указать, но вылетело из головы, да 64-х. Премного благодарен)

Оффлайн Vovsla [?]

  • Осваивающий
  • **
  • Сообщений: 458
  • Репутация: 24
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Быстрый поиск файлов

Код: AutoIt [Выделить]

Func _FileSearch($sPath, $sFileMask)
    Local $sOut, $aOut, $hDir

    $sOut = StringToBinary("0" & @CRLF, 2)
    $hDir = Run(@ComSpec & ' /U /C DIR "' & $sPath & '\' & $sFileMask & '" /S /B /A-D', @SystemDir, @SW_HIDE, 6)

    While 1
        $sOut &= StdoutRead($hDir, False, True)
        If @error Then ExitLoop
    Wend

    $aOut = StringRegExp(BinaryToString($sOut, 2), "[^\r\n]+", 3)
    If @error Then Return SetError(1)

    $aOut[0] = UBound($aOut)-1
    Return $aOut
EndFunc

 


Русское сообщество AutoIt

Re: FileFindNextFile находит то чего нет и не видит то что есть
« Ответ #3 Отправлен: Август 14, 2015, 12:45:09 »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2365
  • Репутация: 409
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Vovsla
Эта функция дает ошибочные результаты. Уже обсуждалось. Привлекать консольное приложение системы при наличии нативных функций- не самое лучшее решение
http://autoit-script.ru/index.php?topic=8266.15
« Последнее редактирование: Август 14, 2015, 13:30:18 от joiner »
Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн Vovsla [?]

  • Осваивающий
  • **
  • Сообщений: 458
  • Репутация: 24
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Странно, у меня с этой функцией проблем не было
Тогда есть другая функция

Код: AutoIt [Выделить]
Func _FindFiles($sRoot, $sFile)

    Local $FileList

    $FileList = _FileListToArray($sRoot, $sFile, 1)
    If Not @error Then
        For $i = 1 To $FileList[0]
            $Text &= $sRoot & '\' & $FileList[$i] & @CRLF
        Next
    EndIf
    $FileList = _FileListToArray($sRoot, '*', 2)
    If Not @error Then
        For $i = 1 To $FileList[0]
            _FindFiles($sRoot & '\' & $FileList[$i], $sFile)
        Next
    EndIf
EndFunc   ;==>_FindFiles

 


Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2365
  • Репутация: 409
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Vovsla
можно самому это сделать, без привлечения библиотеки. хотя в данной функции применяются нативные функции перечисления файлов
для своего проекта я сделал проще
(нажмите для показа/скрытия)
« Последнее редактирование: Август 14, 2015, 16:05:10 от joiner »

Оффлайн Vovsla [?]

  • Осваивающий
  • **
  • Сообщений: 458
  • Репутация: 24
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Ваша функция в 1.8 раза быстрее чем с использованием консоли и в 2.2 раза быстрее чем с использованием FileListToArray
Большое спасибо

Русское сообщество AutoIt

Re: FileFindNextFile находит то чего нет и не видит то что есть
« Ответ #7 Отправлен: Август 14, 2015, 15:51:22 »

Оффлайн Yashied [?]

  • AutoIt MVP
  • Глобальный модератор
  • *
  • Сообщений: 5349
  • Репутация: 2687
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.x.x
На форуме принято помечать тему решенной после получения ответа на свой вопрос!
Вверху или внизу темы нажмите на ссылку такого вида:
Тема не решена


Думай, прежде чем говорить.

Оффлайн Vovsla [?]

  • Осваивающий
  • **
  • Сообщений: 458
  • Репутация: 24
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
joiner, подскажите пожалуйста, как в Вашей функции искать файлы по маске и как пользоваться параметром $Param

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2365
  • Репутация: 409
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
эта функция была скопирована из моего проекта как есть
вот измененный вариант. поиск всех файлов или , если указано расширение, то файлов с этим расширением.все остальное можно доделать по типу
(нажмите для показа/скрытия)
есть библиотека FileOperations.au3
по типу ее функций можно сделать свою
нужно помнить, что каждая проверка отнимает время. поэтому стоит для каждого проекта упрощать функции. мое мнение

Русское сообщество AutoIt

Re: FileFindNextFile находит то чего нет и не видит то что есть
« Ответ #10 Отправлен: Сентябрь 07, 2015, 16:38:07 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
5 Ответов
5614 Просмотров
Последний ответ Февраль 24, 2011, 04:19:40
от Yashied
9 Ответов
6848 Просмотров
Последний ответ Март 31, 2011, 09:11:41
от Suppir
6 Ответов
3163 Просмотров
Последний ответ Сентябрь 15, 2011, 15:10:06
от Zaramot
1 Ответов
2820 Просмотров
Последний ответ Январь 22, 2012, 03:08:29
от sngr
2 Ответов
2250 Просмотров
Последний ответ Май 09, 2012, 13:14:47
от CreatoR
5 Ответов
2987 Просмотров
Последний ответ Март 21, 2013, 16:26:21
от C2H5OH
6 Ответов
2437 Просмотров
Последний ответ Сентябрь 19, 2013, 18:50:03
от Rivald
2 Ответов
922 Просмотров
Последний ответ Май 08, 2014, 00:20:04
от xaker
3 Ответов
1207 Просмотров
Последний ответ Май 08, 2014, 17:46:03
от alex33
0 Ответов
3526 Просмотров
Последний ответ Август 13, 2015, 13:43:18
от madmasles