размер backupa

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

размер backupa

Сообщение panchos » 16.05.2007 (Ср) 14:23

Можно ли написать макрос, чтобы записывал размер папок и файлов в Excel? Спасибо.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 16.05.2007 (Ср) 14:56

Да, можно.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

panchos
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 05.03.2007 (Пн) 9:45

Сообщение panchos » 16.05.2007 (Ср) 15:39

А как, можете подсказать с алгоритмом.

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 16.05.2007 (Ср) 16:02

Алгоритм говоришь...
1. Определится размеры каких папок и файлов должнв быть посчитаны.
2. Перебрать все файлы в папке. Если в заданоой папке есть вложенные папки, то сей пункт выполнить рекурсивно. При переборе файлов определять их размер и суммировать.
3. Записать полученную цифирь в нужное автору место Excel.
Весь мир матрица, а мы в нем потоки байтов!

panchos
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 05.03.2007 (Пн) 9:45

Сообщение panchos » 16.05.2007 (Ср) 16:51

А как считать размер папок и файлов??? И как перебирать все папки и файлы?

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 16.05.2007 (Ср) 19:07

FileLen(FileName) размер файла в байтах
или
LOF(FileNumber) размер открытого файла в байтах
это VB6 функции

А перебирать циклом Do или For и т.п.
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 17.05.2007 (Чт) 3:32

panchos, поищи каждый пункт на форуме и поймешь, что это не так все сложно и бОльая часть уже написана за тебя :)
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

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

Сообщение Хакер » 17.05.2007 (Чт) 12:59

Wolfie
Ну-ка расскажи как ты циклом For собрался перебирать файлы и папки? :lol:
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 17.05.2007 (Чт) 20:07

Хакер а вообще-то иногда вот известно заранее сколько файлов лежит там-то и там-то, особенно если еще какой-нить FileList лежит )) к тому же это я для разнообразия предложил, можно вообще без цикла а при помощи GoTo реализовать :lol: :lol: :lol: тут свобода автора... :roll:
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

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

Сообщение Хакер » 17.05.2007 (Чт) 20:12

Нет, я про GoTo вообще ничего не говорил. Я прошу привести пример перечисления (а не получаения из готового источника, где всё уже перечислено, и остётся лишь получить оттуда информацию). У тебя в распоряжении функция Dir() FindFirstFile() FindNextFile(), может быть что-то ещё, но никаких готовых коллекций и списков (т.е. FSO* и всяческих FileListBox-ов) использовать нельзя.
Последний раз редактировалось Хакер 17.05.2007 (Чт) 20:25, всего редактировалось 1 раз.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 17.05.2007 (Чт) 20:17

Ну, это легко -- сначала формируем список файлов, а потом по этому списку проходим For-ом :lol:
Изображение

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

For вместо Do

Сообщение Wolfie » 17.05.2007 (Чт) 21:35

Хакер писал(а):... Я прошу привести пример перечисления (а не получаения из готового источника, где всё уже перечислено, и остётся лишь получить оттуда информацию).
а получая информацию придется как раз ее перечислять :P
Хакер писал(а):У тебя в распоряжении функция Dir() FindFirstFile() FindNextFile(), может быть что-то ещё, но никаких готовых коллекций и списков (т.е. FSO* и всяческих FileListBox-ов) использовать нельзя.
А не надо додумывать условия 8) Спросил как - я сказал как 8) Но если уж совсем невтерпеж то вот, пожалуйста, как заказывали, образчик:
Код: Выделить всё
Dim X As Byte, Fil() As String, Tmp As String, UBnd As Integer

ReDim Fil(0)
Fil(0) = Dir("*.*")

For X = 1 To 1
    Tmp = Dir()
    If Len(Tmp) Then
        UBnd = UBnd + 1
        ReDim Preserve Fil(UBnd)
        Fil(UBnd) = Tmp
        X = X - 1
    End If
Next X

MsgBox Join(Fil, vbNewLine)
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

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

Сообщение Хакер » 17.05.2007 (Чт) 21:41

вцитаты.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

И все таки For вместо Do! Все то о чем Вы так долго мечтали!

Сообщение Wolfie » 17.05.2007 (Чт) 22:01

верно, Хакер, верно, туда :bball:

WARNING! ёжику понятно, что использовать стоит Do, For тут приведен для жутко-любознательного хакера, использовать его не рекомендуется для решения поставленной задачи ! :salut: преписка: "его" означает "цикл For", но хакера тоже не используйте =)
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

panchos
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 05.03.2007 (Пн) 9:45

Сообщение panchos » 29.05.2007 (Вт) 15:21

А файлы все указывать надо??? для FileLen(FileName)

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 29.05.2007 (Вт) 22:38

Не совсем втянул вопрос, но - да :lol: для каждого файла вызывать FileLen("FileName"), точнее как там было? FileLen(List1.List(X))
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

panchos
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 05.03.2007 (Пн) 9:45

Сообщение panchos » 30.05.2007 (Ср) 8:05

А можно как - нибудь посчитать размер папки? А то замучаюсь писать название файлов. И еще можно в VBA подсчитать количество файлов и папок?

panchos
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 05.03.2007 (Пн) 9:45

Сообщение panchos » 30.05.2007 (Ср) 8:58

tyomitch а как формировать список файлов???

Viper
Артефакт VBStreets
Артефакт VBStreets
Аватара пользователя
 
Сообщения: 4394
Зарегистрирован: 12.04.2005 (Вт) 17:50
Откуда: Н.Новгород

Сообщение Viper » 30.05.2007 (Ср) 10:07

panchos, дык это вот же и далее по всем полезным постам... Dir и FileLen тебе в помощь Ну и цикл Do
Весь мир матрица, а мы в нем потоки байтов!

panchos
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 05.03.2007 (Пн) 9:45

Сообщение panchos » 30.05.2007 (Ср) 10:47

Написал вот так но что - то помоему не правильно


Код: Выделить всё
Sub LenFile()

Dim Fil(0) As String
Dim Tmp As String
Dim Ch As Integer
Dim X As Byte

'ReDim Fil(0)
Fil(0) = Dir("*.*")

While "\\Newmail\BACKUP\backup\Êèòàé" <> ""

Tmp = Dir("*.*")
    If Len(Tmp) Then
        Ch = Ch + 1
        'ReDim Preserve Fil(Ch)
        Fil(Ch) = Tmp
        X = X - 1
    End If
'Next X
Wend
End Sub

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.05.2007 (Ср) 10:52

panchos писал(а):
Код: Выделить всё
While "\\Newmail\BACKUP\backup\Êèòàé" <> ""

Что курим? Где берём?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

panchos
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 05.03.2007 (Пн) 9:45

Сообщение panchos » 30.05.2007 (Ср) 10:55

Если по файлам то получается, а если папку что-то не очень.

djalex777
Постоялец
Постоялец
 
Сообщения: 461
Зарегистрирован: 23.03.2006 (Чт) 16:02

Сообщение djalex777 » 30.05.2007 (Ср) 10:58

Как же можно начинать писать на каком либо языке, не зная основ??? И не понимая, как что работает (в смысле алгоритма хотя бы). А если хочется просто выдрать код набери в поиске "поиск файлов в папке". Ужас...

panchos
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 05.03.2007 (Пн) 9:45

Сообщение panchos » 30.05.2007 (Ср) 11:05

GSerg Мы проверяем, если папка Êèòàé"(Китай) не пуста то проходим цикл.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 30.05.2007 (Ср) 11:09

panchos писал(а):GSerg Мы проверяем, если папка Êèòàé"(Китай) не пуста то проходим цикл.

Следовательно, msgbox "Китай" выведет количество людей в Китае, ну а msgbox "4638 5647 3904 8594" выведет количество денег, имеющихся на счету кредитной карты Visa Classic с номером 4638 5647 3904 8594...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

panchos
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 05.03.2007 (Пн) 9:45

Сообщение panchos » 30.05.2007 (Ср) 11:33

:lol: А как через FOR перебирать файлы в папке. И еще как сформировать файлы которые нужно будет перебирать? Спасибо.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 30.05.2007 (Ср) 12:14

1. Перечитать двенадцатый пост.
2. Повторять пункт 1 до просветления.
Lasciate ogni speranza, voi ch'entrate.

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 30.05.2007 (Ср) 20:27

panchos нет, лучше перечитай 14 пост, что там красным выделено, так просветление быстрее снизайдет.
panchos писал(а):И еще как сформировать файлы которые нужно будет перебирать?
Э, это уже круто. Ну можно их писать в блокноте, в MS Word, можно их нарисовать в MS Paint, можно накопировать их откуда угодно... А как список формируется этих файлов уже описано в этой теме, причем 2 способами, как минимум. Взять и функцией Dir в цикле Do все перебрать и запихать в ListBox или Array() As String (если в модуле обработка идет), тока вот пока список будет формироваться, можно сразу функцией FileLen размер у всех посчитать
Боюсь, что прослыву попугаем...
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

panchos
Новичок
Новичок
Аватара пользователя
 
Сообщения: 26
Зарегистрирован: 05.03.2007 (Пн) 9:45

Сообщение panchos » 02.06.2007 (Сб) 9:56

Написал такую прноцедуру, а как её сделать рекурсивно не знаю

Код: Выделить всё
Sub ZAKUPKI()
Directory = "\\Newmail\BACKUP\backup\Закупки\Заявки поставщикам\"
i = 1

    ' Вставка заголовка
    Sheets("Закупки").Cells(i, 1) = "Имя Файла"
    Sheets("Закупки").Cells(i, 2) = "Размер"
    Sheets("Закупки").Cells(i, 3) = "Дата/Время"
   
    ' Получение первого файла
    Zak = Dir(Directory, 7)
   
    Do While Zak <> ""
    i = i + 1
    Sheets("Закупки").Cells(i, 1) = Zak
    Sheets("Закупки").Cells(i, 2) = FileLen(Directory & Zak)
    Sheets("Закупки").Cells(i, 3) = FileDateTime(Directory & Zak)
   
    ' Получение последнего файла
    Zak = Dir()
   
Loop

End Sub

Wolfie
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 213
Зарегистрирован: 06.03.2006 (Пн) 18:52
Откуда: Россия, Москва, СЗАО

Сообщение Wolfie » 02.06.2007 (Сб) 20:45

Рекурсия это когда функция саму себя вызывает,

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

Так я понимаю решение поставленной задачи
··•··•••··•··••·•·•·•···••·•••···•···•••·•··•·•··
C:\> per asper ad astra
'ASTRA' answer: Path 'ASPER' Not Found
684 Errare humanum est!
C:\> _

След.

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

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

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

    TopList