Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > VB6 > Копирование файлов на VB.NET


Автор: bankuss 14.5.2004, 09:36
Вобщем делаю прогу которая автоматом переносит файлы с сетевого диска на хард.
На сетевом диске есть директория с файлами, а также в этой директории есть поддиректории (тоже с файлами) ну типа K:\файлы и K:\SYS\файлы итд smile.gif
Если делать просто DIR() то я получаю только файлы на K:\
А если сделать DIR с атрибутом directory я получаю имя поддиректории SYS.
Теперь чтоб получить имя файла в SYS вызываю DIR с путем SYS и все ок, имена файлов из поддиректории SYS считываются.
Но как получить имя следующей поддиректории, ведь DIR уже считал имя файла, то есть, при вызове DIR с атрибутом directory я снова получаю SYS а мне нужен следующий подкаталог!

Если сразу вызвать DIR с атриб. directory то он считывает все подряд: и файлы и поддиректории, но поддиректории он считывает не так, как мне нужно т.е. возвращяет просто имя SYS без слэша и именен файлов...

Может кто разбирался с этими функциями? Как лучше сделать код?

Автор: Akina 14.5.2004, 09:51
Делаем подпрограмму (или функцию), которая принимает путь. Сперва она делает CHDIR по указаннному пути, потом DIR для получения списка файлов, затем DIR для получения списка подкаталогов, и наконец для каждого из полученных подкаталогов вызвать себя же, передав в качестве параметра подкаталог. Обычная рекурсия, короче...

Автор: bankuss 14.5.2004, 11:05
Маловероятно что это будет работать.... так как DIR вначале должен вызываться с параметром пути, а затем, чтоб получить следующее имя - без параметров, а если его постоянно вызывать с параметром пути то и имя файла всегда будет одно и то же (первое), а без параметра пути первый раз DIR вызывать нельзя....

я уже пробовал подобным образом все это в цикле сделать, но как написал выше, ничего невышло...

Автор: Akina 14.5.2004, 11:12
bankuss
Здравствуй, милая моя! я тебе что, свою функцию DIR вместо системной предлагаю писАть? Сперва ты из текущего каталога выгребаешь по одному все файлы и все подкаталоги и только после этого начинаешь рекурсивный обход подкаталогов - которые ты нагреб в локальный массив.

Автор: bankuss 14.5.2004, 11:15
ты имеешь ввиду имена поддиректорий складывать в строковый массив, а потом их "приклеивать" к пути и цеплять оттуда файлы?

Автор: Akina 14.5.2004, 11:51
bankuss
Угусеньки. Типа так:

Код
Sub PrintFileList(ScanPath as String)
Dim Temp as String
Dim SubFolders(0 to 1000) as String
Dim i as Integer
Dim j as Integer

Temp=Dir(ScanPath & "\*.*",vbNormal)
while Temp <> ""
  Debug.Print Temp
  Temp=Dir
wend

i=0

SubFolders(i)=Dir(ScanPath & "\*.*",vbDirectory)
while SubFolders(i)<> ""
  i=i+1
  SubFolders(i)=Dir
wend

for j=0 to i-1
  call PrintFileList(SubFolders(j))
next j

end sub

Автор: bankuss 14.5.2004, 11:59
а уже так думал сделать smile.gif но почему то хотелось без всяких массивов обойтись...оказалось низзя...

Автор: Akina 14.5.2004, 12:14
Тьфу, блин, совсем ты меня запутал... и я тоже.

Короче так: код выше похерить, идею оставить.

Сканирование делаем не 2 раза, а один, с атрибутом vbDirectory, и сразу сортируем на файлы и подкаталоги. Файлы выводим, подкаталоги суем в массив. Закончив обработку каталога, начинаем рекурсивный вызов для каждого подкаталога.

Остальное верно...
Цитата
Dir Function
     
Returns a String representing the name of a file, directory, or folder that matches a specified pattern or file attribute, or the volume label of a drive.

Syntax

Dir[(pathname[, attributes])]

The Dir function syntax has these parts:

Part Description
pathname Optional. String expression that specifies a file name — may include directory or folder, and drive. A zero-length string ("") is returned if pathname is not found.
attributes Optional. Constant or numeric expression, whose sum specifies file attributes. If omitted, returns files that match pathname but have no attributes.

Settings

The attributes argument settings are:

Constant Value Description
vbNormal 0 (Default) Specifies files with no attributes.
vbReadOnly 1 Specifies read-only files in addition to files with no attributes.
vbHidden 2 Specifies hidden files in addition to files with no attributes.
VbSystem 4 Specifies system files in addition to files with no attributes.
vbVolume 8 Specifies volume label; if any other attributed is specified, vbVolume is ignored.
vbDirectory 16 Specifies directories or folders in addition to files with no attributes.

Автор: bankuss 14.5.2004, 12:18
я тоже к этому пришел smile.gif так как этот код будет давать ошибку.
Но тогда как отличить - каталог это или файл?

Автор: Akina 14.5.2004, 12:20
Цитата
GetAttr Function
     
Returns an Integer representing the attributes of a file, directory, or folder.


Автор: bankuss 14.5.2004, 13:06
с небольшими модернизациями и доработками все заработало... smile.gif
Добавлено @ 13:09
и еще
а можно ли сделать, чтоб копируемые файлы сжимались в zip?
Я где то читал что есть dll зиповая, которую можно юзать в своих прогах

Автор: cardinal 14.5.2004, 14:08
bankuss, еще тут можешь почитать по поводу первого вопроса:
http://forum.vingrad.ru/index.php?showtopic=9458
А по поводу второго задай вопрос отдельно- таковы правила.
Ты их читал? smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)