Автор Тема: Поиск файла по маске на CD-ROM  (Прочитано 6190 раз)

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

Оффлайн bomond [?]

  • Новичок
  • *
  • Сообщений: 8
  • Репутация: 0
  • Пол: Мужской
    • Награды
Здравствуйте уважаемые форумчане! Решил потихоньку осваивать autoIt и для более эффективного процесса выбрал небольшую практическую задачу. Суть такова, необходимо получить путь к файлу с определенным расширением. Файл расположен на компакт диске. Я так понимаю надо произвести поиск всех CD-ROM в системе, потом организовать поиск файла по маске на найденных CD-ROM приводах. А вот как это сделать пока не въеду. Помогите пожалуйста кто чем может :) По форуму искал, но ничего не нашел.

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

Поиск файла по маске на CD-ROM
« Отправлен: Июль 16, 2012, 23:12:21 »

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135
  • Репутация: 461
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Поиск файла по маске на CD-ROM
« Ответ #1, Отправлен: Июль 16, 2012, 23:22:30 »
Вам нужно почитать о функциях:
Код: AutoIt [Выделить]

Оффлайн bomond [?]

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

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: Поиск файла по маске на CD-ROM
« Ответ #2, Отправлен: Июль 16, 2012, 23:41:17 »
Да, про эти функции я прочитал в справке, попробовал позапускать примеры, все работает, но пока картина у меня не выстраивается. CD-ROM в системе может быть сколько угодно, соответственно нужно наверное определить те из них, которые доступны, и на них искать файл. По условию файл всегда расположен по такому пути (пример E:\folder\xxx.txt). Но имя папки в которой лежит файл всегда разное от диска к диску. Функция FileFindFirstFile ищет файл в текущей директории, так что даже если я определю буквы доступных дисков, поиск по ним ничего не даст. Вот это мне не понятно. Так же непонятно как записать в переменную полный путь к найденному файлу. Я в программировании практически дуб.

Оффлайн inververs [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 2135
  • Репутация: 461
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Поиск файла по маске на CD-ROM
« Ответ #3, Отправлен: Июль 17, 2012, 00:10:22 »
Код: AutoIt [Выделить]
#include <array.au3> ;Подключаем библиотеку массивов, для того что бы работала функция _ArrayDisplay
$aCD = DriveGetDrive("CDROM") ;Вернет массив букв CDROM-ов.
;Работать с массивами можно с помощью функции FOR
_ArrayDisplay($aCD) ;Посмотрим, что содержится в массиве. В готовой программе эту строчку естественно нужно убрать или закоментировать.
;В колонке ROW  - цифры - индексы массива
;Причем в строке с индексом 0  - указано количество CDROM-ов
;В колонке Col 0 - буквы дисков CDROM
;Значит нужно по очереди их обработать.
;Воспользуемся простейшим циклом

For $i = 1 To $aCD[0] ;$aCD[0] - означает получить строчку из массива $aCD с индексом 0. Там как ты помнишь количество CDROM-ов
    ;Начинаем с 1 т.к в 0 индексе общее количество.
    ;В этом цикле $i будет меняться от 1 до $aCD[0]
    ;Например, за сменой $i можно понаблюдать вставив строчку ConsoleWrite("Текущее значение переменной $i = "& $i & @LF)

    $sDisk = $aCD[$i] ;Присваиваем переменной $sDisk $i-ый элемент массива. 1,2,3 до $aCD[0]
    ConsoleWrite("Сейчас работаем с диском: " & $sDisk & @LF) ;Посмотрим - какая выбрана буква
    ;Откроем пример  по FileFindFirstFile
    ;В качестве параметра FileFindFirstFile - принимаем путь для поиска, пусть поддерживает подстановочные знаки * и ?
    ;Я не использую подстановочные знаки, поэтому скрипт слегка упростится.

    ;Т.к по условию файл находится на дисках и имеет вид E:\folder\xxx.txt где диск E: - любой диск CDROM, то составим путь поиска.

    $sSearch = $sDisk & "\DirectX\DSETUP.dll"
    ConsoleWrite("Сформированна строка для поиска: " & $sSearch & @LF) ;Посмотрим, какой составлен путь.
    ;Выполним функцию FileFindFirstFile
    Local $search = FileFindFirstFile($sSearch)

    ;Дальше со справки копируем остальную часть, но немного переделаем
    If $search = -1 Then
        MsgBox(4096, "Error", "Ничего не найдено.")
;~     Exit  - нам не нужно завершать работу программы, а нужно попробывать другой диск поэтому заменим на команду ContinueLoop
        ContinueLoop ;она продолжит цикл не переходя на последующие строки.
    EndIf
    ;На эту строчку программы мы попадем только в случае успешного поиска.
    ;Поэтому копируем пример со справки дальше.

    While 1
        Local $file = FileFindNextFile($search)
        If @error Then ExitLoop ;
        ;Файл найден, и переменная $file равна строке DSETUP.dll
        ;Это значит что поиск по полному пути - прошел удачно и ответ содержится в перменной $sSearch

        ConsoleWrite("Нашелся файл: " & $sSearch & @LF) ;Выведем ее в консоль.
        ConsoleWrite("Переменная $file равна" & $file & @LF)
    WEnd

Next
FileClose($search) ;закрываем хэндл поиска.
;Но если тебе нужно просто проверить есть ли файл по указанному пути - то пользуйся функцией FileExists



Добавлено: Июль 17, 2012, 00:11:00
Этот скрипт нужно запускать в редакторе SciTe клавишей F5


Добавлено: Июль 17, 2012, 00:19:14
Если имя папки не известно, то ищи пользовательскую функцию _FileSearch на форуме, т.к в autoit аналогов нет.


Добавлено: Июль 17, 2012, 00:20:55
Вот она
http://azjio.ucoz.ru/publ/skripty_autoit3/funkcii/filesearch/11-1-0-33
« Последнее редактирование: Июль 17, 2012, 00:20:55 от inververs, Причина: Объединение сообщений »

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

Re: Поиск файла по маске на CD-ROM
« Ответ #3 Отправлен: Июль 17, 2012, 00:10:22 »

Оффлайн bomond [?]

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

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: Поиск файла по маске на CD-ROM
« Ответ #4, Отправлен: Июль 17, 2012, 00:29:37 »
Спасибо большое, буду разбираться.

Оффлайн Yuriy [?]

  • AutoIt Гуру
  • *****
  • Сообщений: 737
  • Репутация: 281
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Поиск файла по маске на CD-ROM
« Ответ #5, Отправлен: Июль 17, 2012, 00:38:50 »
bomond
Вот еще, мне так кажется, будет полезным
http://autoit-script.ru/index.php/topic,8266.0.html

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2759
  • Репутация: 464
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Поиск файла по маске на CD-ROM
« Ответ #6, Отправлен: Июль 17, 2012, 06:42:04 »
(нажмите для показа/скрытия)
или просто через функцию
Код: AutoIt [Выделить]

Код: AutoIt [Выделить]
$folder_file = FileSelectFolder('','')
    $aReturn = _FileSearch($folder_file, "*.txt", 1, 1)
    For $i = 1 To UBound($aReturn) - 1
        MsgBox(0, '', $aReturn[$i])
    Next

Были времена, когда солнце было ярче, трава зеленее, а водка сорокоградуснее

Оффлайн bomond [?]

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

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: Поиск файла по маске на CD-ROM
« Ответ #7, Отправлен: Июль 17, 2012, 08:35:16 »
Спасибо. А может может как то помочь тот факт, что папка, в которой лежит файл всегда имеет кириллическое имя?

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

Re: Поиск файла по маске на CD-ROM
« Ответ #7 Отправлен: Июль 17, 2012, 08:35:16 »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2759
  • Репутация: 464
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Поиск файла по маске на CD-ROM
« Ответ #8, Отправлен: Июль 17, 2012, 09:39:35 »
помочь чему? скрипт, который я привел, ищет файлы с расширением .txt на всех сидиромах. если есть вложенные папки, то и в них ищет.
bomond, что у тебя не срастается?

Оффлайн bomond [?]

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

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: Поиск файла по маске на CD-ROM
« Ответ #9, Отправлен: Июль 17, 2012, 10:27:51 »
Не срастается то, что я не могу запустить Ваш скрипт. Вот код:
  #include <FileOperations.au3>
$folder_file = FileSelectFolder('','')
           $aReturn = _FileSearch($folder_file, "*.txt", 1, 1)
           For $i = 1 To UBound($aReturn) - 1
           MsgBox(0, '', $aReturn[$i])
           Next
Или я не то приинклюдил. Ошибка такая: ERROR: _FileSearch(): undefined function.Я так понимаю мне нужно подключить скрипт _FileSearch.au3, я не пойму где его взять.
« Последнее редактирование: Июль 17, 2012, 10:34:28 от bomond »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2759
  • Репутация: 464
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Поиск файла по маске на CD-ROM
« Ответ #10, Отправлен: Июль 17, 2012, 10:33:55 »
полный скрипт под кнопочкой "подробнее"  :)
тот что ты скопировал это лишь пример как можно изменить основной скрипт..будет так
(нажмите для показа/скрытия)
вот тебе второй вариант.
то есть в первом варианте мы задаем искать только на сидиромах, а в этом варианте мы выбираем папку или диск для поиска

Оффлайн bomond [?]

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

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: Поиск файла по маске на CD-ROM
« Ответ #11, Отправлен: Июль 17, 2012, 10:35:51 »
Спасибо, проясняется, запустить удалось. :) Только мне теперь надо чтобы не окошко с перечислением найденных файлов выводилось, а просто путь к найденному файлу занести в какую-нибудь переменную. Я хочу этот путь потом вставить в поле ввода в другой программе. Я правильно понимаю, что полный путь к найденному файлу содержится в $aReturn?
« Последнее редактирование: Июль 17, 2012, 10:44:21 от bomond »

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2759
  • Репутация: 464
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Поиск файла по маске на CD-ROM
« Ответ #12, Отправлен: Июль 17, 2012, 10:56:35 »
если нужно найти один единственный файл, то можно так

(нажмите для показа/скрытия)

Оффлайн bomond [?]

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

  • Автор темы
  • Репутация: 0
  • Пол: Мужской
    • Награды
Re: Поиск файла по маске на CD-ROM
« Ответ #13, Отправлен: Июль 17, 2012, 12:51:04 »
joiner, спасибо большое! У меня получилось, файл находится и путь к нему вставляется в форму ввода. Теперь у меня такой вопрос. После того, как программа выбрала файл, пользователю предлагается ввсести пароль от этого файла. Пароль всегда фиксированной длинны - 12 символов. Нужно сделать каким то образом проверку на количество введенных символов и как только их будет введено 12, нажать кнопку далее. Окошко вот такое
ссылка:http://savepic.net/3111449.htm [nonactive]

Оффлайн joiner [?]

  • Расмус-бродяга
  • AutoIt Гуру
  • *****
  • Сообщений: 2759
  • Репутация: 464
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.12.0
Re: Поиск файла по маске на CD-ROM
« Ответ #14, Отправлен: Июль 17, 2012, 13:05:23 »
bomond
по правилам форума: один вопрос - одна тема. но сначала поищи по форуму . очень много вопросов обсуждалось. ;)

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

Re: Поиск файла по маске на CD-ROM
« Ответ #14 Отправлен: Июль 17, 2012, 13:05:23 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
3671 Просмотров
Последний ответ Апрель 19, 2010, 21:29:53
от VAR
16 Ответов
5723 Просмотров
Последний ответ Август 17, 2011, 11:31:24
от madmasles
9 Ответов
4310 Просмотров
Последний ответ Август 10, 2012, 19:10:05
от BlackReality
3 Ответов
5755 Просмотров
Последний ответ Февраль 03, 2016, 11:09:31
от alexnasa
3 Ответов
939 Просмотров
Последний ответ Сентябрь 03, 2014, 13:05:21
от shas.1984
4 Ответов
2853 Просмотров
Последний ответ Октябрь 23, 2014, 19:31:14
от BSoD404
2 Ответов
847 Просмотров
Последний ответ Март 29, 2015, 07:45:28
от joiner
2 Ответов
961 Просмотров
Последний ответ Апрель 18, 2016, 17:17:27
от ZeVSalt
11 Ответов
813 Просмотров
Последний ответ Октябрь 26, 2017, 19:25:07
от Garrett
1 Ответов
349 Просмотров
Последний ответ Июль 11, 2018, 18:20:59
от InnI