Что нового

[Элементы GUI] Обработка фразы введенной с помошью GUICtrlCreateInput

Cirno

Новичок
Сообщения
10
Репутация
0
Всем доброго времени суток. Создаю вот такое окошко
Код:
$trewwindow= GUICreate("Первая функция", 200, 100) ; first func
  GUICtrlCreateLabel("Выберите путь к директории в которой будет происходит сортировка", 30,10)
  $file = GUICtrlCreateInput ( "", 10,  5, 300, 20)
  GUICtrlSetState(-1,$GUI_DROPACCEPTED)
  $btn = GUICtrlCreateButton ("Ok", 40,  75, 60, 20)

Потом передаю в FileMove переменную $file вот так
Код:
FileMove($file &"*.djvu",@DesktopDir & "\Отсортированные\книги", 9)

Но не получается перейти к этой директории.
Еще возникает вопрос, как построить правильное условие проверки папки, которую будут сортировать.
Код:
If $file="C:\"
 	     MsgBox(1, "Опасно", "Вы пытаетесь отсортировать весь жесткий диск, это может привести к отказу системы")
	  EndIf
	  If $file=="C:\Windows"
		  MsgBox(1, "Опасно", "Вы пытаетесь отсортировать папку windows, это может привести к отказу системы")
;     EndIf
Написал так, но не работает.
 

InnI

AutoIT Гуру
Сообщения
4,912
Репутация
1,429
Cirno
Прочитать текст из поля Input
Код:
GUICtrlRead($file)

А для поиска файлов в папке по маске изучайте
Код:
FileFindFirstFile()
_FileListToArray()
 

erlik

Продвинутый
Сообщения
317
Репутация
84
Код:
#include <Constants.au3>
#include <GUIConstants.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>

; для drag & drop окно должно иметь стиль $WS_EX_ACCEPTFILES
$trewwindow = GUICreate("Первая функция", 200, 100, Default, Default, Default, $WS_EX_ACCEPTFILES)
GUICtrlCreateLabel("Выберите путь к директории в которой будет происходит сортировка", 30, 10)
$file = GUICtrlCreateInput("", 10, 5, 300, 20)
GUICtrlSetState($file, $GUI_DROPACCEPTED)
$btn = GUICtrlCreateButton("Ok", 40, 75, 60, 20)
GUISetState(@SW_SHOW)

While 1
	$msg = GUIGetMsg()
	Select
		Case $msg = $GUI_EVENT_CLOSE
			Exit
		Case $msg = $btn
			$sPath = GUICtrlRead($file) ; считываем путь
			If CheckSelectFolder($sPath) = 1 Then
				FileChangeDir($sPath) ; изменяем рабочий каталог на указанный
				If FileMove("*.djvu", @DesktopDir & "\Отсортированные\книги\", 9) Then
					$sResult = "Файлы скопированы"
				Else
				    $sResult = "Файлы не были скопированы"
				EndIf
				MsgBox(0, "", $sResult)
			EndIf
	EndSelect
WEnd


Func CheckSelectFolder($sPath)
	Switch $sPath
		Case @HomeDrive & '\', @WindowsDir  ; если выбраны C:\, C:\Windows
			Return MsgBox(1, "Опасно", "Продолжить?") ; при ответе ОК - возвращается 1, файлы будут перемещены
		Case (Not FileExists($sPath)), ''
				MsgBox(0, "", "Путь не существует")
			Return 0
		Case '<еще какое то условие>'
				;'<еще какое то действие>'
			Return 0
		Case Else
			Return 1
		EndSwitch
EndFunc   ;==>CheckSelectFolder
 
Автор
C

Cirno

Новичок
Сообщения
10
Репутация
0
Код:
Case (Not FileExists($sPath)), ''
Каждый раз пишет, что путь не найден.
 

erlik

Продвинутый
Сообщения
317
Репутация
84
Печально. :( У меня этот код работает.
Значит переменная $sPath не содержит валидного пути.
Сделайте так: MsgBox(0, "", "Путь " & $sPath & " не существует") и посмотрите, что покажет.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
erlik сказал(а):
Сделайте так: MsgBox(0, "", "Путь " & $sPath & " не существует") и посмотрите, что покажет.
Боюсь что предупреждении будет... ;)
 
Автор
C

Cirno

Новичок
Сообщения
10
Репутация
0
Пишет, как неудивительно, то что я пишу.
Попробовал твой код, так работает. Буду разбираться. Спасибо.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
как я понял
Код:
FileMove("*.djvu", @DesktopDir & "\Отсортированные\книги\", 9)

перемещает все файлы с определенным расширением.
у меня срабатывает только один раз. то есть из десяти файлов перемещает только один.
 
Автор
C

Cirno

Новичок
Сообщения
10
Репутация
0
Странно, я попробовал для txt он все перемещает.
Все заработало, всем спасибо :smile:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
в пределах одного диска - перемещает все
если делать перемещение с диска на диск, то только один файл перемещает.
 

alex33

Скриптер
Сообщения
1,457
Репутация
186
joiner сказал(а):
в пределах одного диска - перемещает все
если делать перемещение с диска на диск, то только один файл перемещает.
Примечания
Если исходный каталог и каталог назначения находятся на разных дисках, тогда будут выполнены операции копирования/удаления вместо обычного перемещения.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
alex33
да, это понятно. читал :smile:
происходит обычное копирование. и копирование всего лишь одного файла. а значит код, который пишет ТС не будет универсальным. ну , это его дело, конечно
 

erlik

Продвинутый
Сообщения
317
Репутация
84
alex33,joiner
Чего то вы не в ту степь углубились. У меня перемещаются все файлы по маске с любых разделов\дисков - всего в системнике три винта . Это у меня аномалия выходит какая то?
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
erlik
не могут они у тебя перемещаться..с диска на диск , согласно справке, только копирование. я проверил код, которые выложен в этой теме, и был скопирован только один файл. в пределах одного диска происходит перемещение всех файлов
 

erlik

Продвинутый
Сообщения
317
Репутация
84
joiner
Ок. Давай разберем, что я сделал не так - вот пример, где все почему то перемещается.
Архив 4 mb - запись действий psr. Перемещаю файлы *.bat из папку BatUtils (диск 2) в папку TEST на диске 0.
http://yadi.sk/d/l8WF7DpsNu3e8
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
erlik
лови видео. твой код из темы один в один. только файлы другие https://cloud.mail.ru/public/1333e35424bc/Project001.exe
видео в экзешнике. программа для записи видео UVScreenCamera
у меня в компе два физических диска. по разделу на каждом
 

erlik

Продвинутый
Сообщения
317
Репутация
84
joiner
Твое видео показывает только то, что это ТОЛЬКО у тебя не перемещается. И причин тому - вагон и маленькая тележка. Или ты не согласен, что если хотя бы на одном компе перемещение работает - то оно работает ?
Если машина не едет - это еще не значит, что она не едет вообще. Может просто бензин кончился, или она сломалась, или просто водитель тормоз с газом перепутал. :smile:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
erlik
если проблема есть, то хочется знать в чем. версия языка последняя (не бета)
а так это "фактики в мире галактики" :smile:


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

я нашел в чем проблема. она в атрибуте "только чтение". но!!!!
в пределах одного локального диска этот атрибут для перемещения не помеха, но если перемещаем файлы с атрибутом "только чтение" с другого диска, то перемещения не происходит. в справке указано, что некоторые атрибуты файлы могут помешать выполнению функции. но , как оказалось, это не единственный нюанс
поэтому в коде лучше предусмотреть снятие атрибутов у перемещаемых файлов
вот такие пироги
 

erlik

Продвинутый
Сообщения
317
Репутация
84
joiner
Дык не в языке дело. В системе. Права доступа - ACL - для учетки на запись, удаление и т.д. файлов\каталогов.
Я себе когда 8-ку поставил - так у меня система вообще ничего не давала нормально скопировать на системный диск с других разделов пока массово всем файлам и каталогам ACL не поменял.
FileMove сама по себе делает именно то, что делает - перемещает что указано куда указано. Но если сталкивается с ограничением системы - завершает действие и возвращает ошибку. Конечно, чтобы избежать таких вариантов нужно усложнять код , делать проверки, возвращать описание ошибки, предлагать действия. Но суть то не в этом - факт в том, что изначально не важно что, куда и откуда перемещать.


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

Ну вот и нашелся 'стрелочник' :smile:
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
ну так слушай далее. в системе имею права обычного администратора-пользователя. контроль учетных записей отключен.
FileMove не работает ни с другим жестким диском ни с флешкой, если на них файлы имеют атриб "только чтение". я не считаю этот момент незначительным при написании кодов. не учитывая мелкие нюансы можно столкнуться с проблемой неработоспособности кода.
вобщем, ТС походу это не надо. поэтому можно прекратить обсуждение. по крайней мере был повод что то узнать. хотя бы мне лично
 
Верх