CopyFile по маске

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
ssv22
Обычный пользователь
Обычный пользователь
 
Сообщения: 89
Зарегистрирован: 06.11.2005 (Вс) 8:47

CopyFile по маске

Сообщение ssv22 » 14.11.2005 (Пн) 10:56

Как скопировать группу файлов ПО МАСКЕ из одного каталога в другой?
CopyFile - не берет маску (типа*.*)
Есть ли аналог CopyFile?

Спасибо

ANDLL
Великий гастроном
Великий гастроном
Аватара пользователя
 
Сообщения: 3450
Зарегистрирован: 29.06.2003 (Вс) 18:55

Сообщение ANDLL » 14.11.2005 (Пн) 14:53

Руки? Достойный аналог всего....
Может еще SHFileOperation так может...
Гастрономия - наука о пище, о ее приготовлении, употреблении, переварении и испражнении.
Блог

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 14.11.2005 (Пн) 15:05

ssv22, кто же в наше время пользуется CopyFile :wink: ? Вообще способов скопировать группу файлов по маске тьма. Ну вот например некоторые.

Первый. Самый, на мой взгляд, "неправильный". Сделать на форме объект типа File. (стандартный такой компонент) Поставить ему Visible = False, Filter = <твоя маска>, Hiden, System и тд тоже в True (если хочешь иметь дело со скрытыми и системными файлами) и тогда получаешь список файлов, причём, именно с применением маски.

Дальше заводи свою функцию myFileCopy и пиши там сию молитву:
Код: Выделить всё
Public Function myFileCopy(sFrom as String, sTo as string) as Boolean
'// sFrom - путь откуда копировать
'// sTo - куда копировать
'// Функция возвращает True если всё прошло без ошибок
On Error GoTo ErrorHander
Dim bWasErrors As String
Dim i                 As Integer
'Допустим твой список так и остался с именем File1


For i = 0 To File1.ListCount - 1
   FileCopy sFrom + "\" + File1.List(i), sTo + "\" + File1.List(i)
Next i

myCopyFile = Not bWasErrors

Exit Sub
ErrorHandler:
bWasError = bWasError Or True
Resume Next
Exit Function


Второй способ. Этим способом я пользовался раньше, когда только начинал что-то писать: Создаём БАТ-файл, пишем туда всё что надо, запускаем, и пусть над твоей проблемой парится DOS.

Код: Выделить всё
Public Function myCopyFile(sMask as string ,sFrom As String, sTo as String)
On Error GoTo EH
   Dim FFHandler   as Long '// Свободный номер для открытия фвла
   Dim bWasErrors as Boolean '//Были ли ошибки
   FFHandler = FreeFile
   Open "#HR251TEMP.BAT" For OutPut as #FFHandler
      Print #FFHandler, "Copy "+sFrom+sMask+" "+sTo
   Close #FFHandler
   Shell "#HR251TEMP.BAT", vbMinimizedNoFocus
   myCopyFile = Not bWasErrors
Exit Function
EH:
bWasErrors = bWasErrors Or True
Resume Next
End Function


Третий способ. (Мой любимый).
Ну не то чтобы сказать любимый, но наверное более красивый чем изобретение велосипеда и прочих извращений со списками. Как ты и спрашивал
Есть ли аналог CopyFile

-Есть, есть API-шная функция SHFileOperation . Она может не только копировать, но и удалять, перемещать и т.д. При этом также появляется стандартное виндознон окно с полосой прогресса и кнопкой отменить. Функции передаётся указатель на структуру, содержащую все параметры операции. После вызова функции shell32.dll будет изменять некоторые переменные этой структуры, например сколько % скопировано,какой сейчас файл копируется, какие были ошибки.

Поищи в API-справочниках её подробное описание, если не найдёшь, дай знать. - Я напишу в след. ответе.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

hmm3rulez
Новичок
Новичок
Аватара пользователя
 
Сообщения: 38
Зарегистрирован: 30.04.2006 (Вс) 13:45
Откуда: Питер

Сообщение hmm3rulez » 14.05.2006 (Вс) 11:32

Хотел написать на Visual Basice (6-й русифицированный, без хелпа) программу, чтобы перемещаться по папкам и при нажатии на кнопку, все файлы из текущей папки с расширениями "txt" и "doc" копировались бы в папку d:\hmm3rulez. Понял, что не смогу и стал писать, чтобы хотя бы один файл, на который я покажу копировался бы. Но тут возникли вопросы: 1). Почему иногда при копировании файлы копируются, но в папке d:\hmm3rulez оказываются пустыми (нулевого размера)? 2). Почему иногда при копировании файлы не копируются, а появляется ошибка: "Ошибка во время выполнения программы '53'"? 3). Почему при переходе на диск "С:" ВСЕГДА появляется 53-я ошибка?
Фрагмент программы:
Public TinyFileName As String
Dim PathSearch As String
Dim FileName As String
Dim DiskName As String
Private Sub Dir1_Change()
File1.Path = Dir1.Path
End Sub
Private Sub Drive1_Change()
DiskName = Drive1.Drive
Dir1.Path = DiskName
File1.Path = Dir1.Path
End Sub
Private Sub File1_Click()
TinyFileName = File1.FileName
FileCopy TinyFileName, "d:\hmm3rulez\" & TinyFileName
End Sub

ssv22
Обычный пользователь
Обычный пользователь
 
Сообщения: 89
Зарегистрирован: 06.11.2005 (Вс) 8:47

Сообщение ssv22 » 14.05.2006 (Вс) 13:49

hmm3rulez писал(а):Хотел написать на Visual Basice (6-й русифицированный, без хелпа) программу, чтобы перемещаться по папкам и при нажатии на кнопку, все файлы из текущей папки с расширениями "txt" и ".FileName...


Пользуйся "File System Object (FSO)" искренне советую.
См. прикр. файл.
Вложения
FSO.ZIP
(82.59 Кб) Скачиваний: 94

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 14.05.2006 (Вс) 14:09

Вот держи пример
Вложения
ForSomebody.rar
Экзампле
(2.71 Кб) Скачиваний: 113
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

hmm3rulez
Новичок
Новичок
Аватара пользователя
 
Сообщения: 38
Зарегистрирован: 30.04.2006 (Вс) 13:45
Откуда: Питер

Сообщение hmm3rulez » 14.05.2006 (Вс) 19:18

ssv22, Хакер - СПАСИБО!


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 145

    TopList