Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Копирование файлов на VB.NET, как лучше сделать... 
:(
    Опции темы
bankuss
Дата 14.5.2004, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 26.3.2004

Репутация: 3
Всего: 4



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

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

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

PM MAIL   Вверх
Akina
Дата 14.5.2004, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



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


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bankuss
Дата 14.5.2004, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 26.3.2004

Репутация: 3
Всего: 4



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

я уже пробовал подобным образом все это в цикле сделать, но как написал выше, ничего невышло...
PM MAIL   Вверх
Akina
Дата 14.5.2004, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



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


Это сообщение отредактировал(а) Akina - 14.5.2004, 11:12


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bankuss
Дата 14.5.2004, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 26.3.2004

Репутация: 3
Всего: 4



ты имеешь ввиду имена поддиректорий складывать в строковый массив, а потом их "приклеивать" к пути и цеплять оттуда файлы?
PM MAIL   Вверх
Akina
Дата 14.5.2004, 11:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



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



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bankuss
Дата 14.5.2004, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 26.3.2004

Репутация: 3
Всего: 4



а уже так думал сделать smile.gif но почему то хотелось без всяких массивов обойтись...оказалось низзя...
PM MAIL   Вверх
Akina
Дата 14.5.2004, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Тьфу, блин, совсем ты меня запутал... и я тоже.

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

Сканирование делаем не 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.


Это сообщение отредактировал(а) Akina - 14.5.2004, 12:19


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bankuss
Дата 14.5.2004, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 26.3.2004

Репутация: 3
Всего: 4



я тоже к этому пришел smile.gif так как этот код будет давать ошибку.
Но тогда как отличить - каталог это или файл?
PM MAIL   Вверх
Akina
Дата 14.5.2004, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата
GetAttr Function
     
Returns an Integer representing the attributes of a file, directory, or folder.




--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bankuss
Дата 14.5.2004, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 396
Регистрация: 26.3.2004

Репутация: 3
Всего: 4



с небольшими модернизациями и доработками все заработало... smile.gif
Добавлено @ 13:09
и еще
а можно ли сделать, чтоб копируемые файлы сжимались в zip?
Я где то читал что есть dll зиповая, которую можно юзать в своих прогах
PM MAIL   Вверх
cardinal
Дата 14.5.2004, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



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


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.