Как узнать объем папки

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

Как узнать объем папки

Сообщение Lotreck » 02.05.2008 (Пт) 19:48

Как узнать общий объем папки, а также объем файлов определенного типа, например .txt , хранящихся в ней?

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

Сообщение Хакер » 02.05.2008 (Пт) 19:57

Lotreck
Найти объём всех файлов, лежащих в ней, и сложить.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 02.05.2008 (Пт) 20:11

Поконкретней бы. Существует ли специальная функция? А если количество файлов постоянно меняется и их сложно отследить?

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

Сообщение Хакер » 02.05.2008 (Пт) 20:15

Существует ли специальная функция?

Для чего? Для определения размера одного файла? Да, их тьма.
Для перебора всех файлов в папке? Да, и их тьма.

А если количество файлов постоянно меняется и их сложно отследить?

То что тогда? Или ты думаешь, что мудрая система держит всё под контролем и, несмотря на бешеную рождаемость/смертность файлов, может в любой размер сообщить тебе их размер?

Нет, она этого не делает.

С другой стороны, если файлы у тебя постоянно рождаются/умирают/изменяются, какой смысл измерять их суммарный объём, если через какие-то доли секунд информация окажется уже неактуальной?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 02.05.2008 (Пт) 20:45

Функция для подсчета объема файлов определенного типа.
Частный случай такой. В папке хранятся файлы различного типа, в том числе текстовые, в которые периодически вносится или считывается данные. В определенный момент вся информация из текстовых файлов считывается. Необходимо зафиксировать этот момент и выдать соощение.

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

Сообщение Хакер » 02.05.2008 (Пт) 20:48

Функция для подсчета объема файлов определенного типа.

Конечно нет. Никто не будет делать в системе/языке функции для всех нужд, которые, возможно, придут в голову пользователям/программистам.

В определенный момент вся информация из текстовых файлов считывается. Необходимо зафиксировать этот момент и выдать соощение.

Если задача в этом, причём тут определение размера всех файлов? Потому что "фиксирование этого момента" достигается совсем другими путями.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 02.05.2008 (Пт) 21:08

Нет не в этом. Задача в следующем: раз в сутки проверить являются ли все текстовые файлы папки пустыми или нет.

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

Сообщение Хакер » 02.05.2008 (Пт) 21:09

Ага. А теперь вопрос: какая проблема возникла у тебя на пути решения этой задачи?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 02.05.2008 (Пт) 21:17

Да я вообще не знаю с какой стороны подступиться!
Специальной функции нет.
Сколько файлов будет в момент считывания тоже неизвестно.

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

Сообщение Хакер » 02.05.2008 (Пт) 21:19

Специальной функции нет.

Как же ты пишешь программы, если у тебя любой замысел обламывается на том, что "специальной фукнкции" нет? Нет функции -- напиши.

Сколько файлов будет в момент считывания тоже неизвестно.

Что мешает определить?
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 02.05.2008 (Пт) 21:33

Ничего не мешает. Просто сталкиваюсь с этим впервые и хотел узнать мнение других.

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

Сообщение Хакер » 02.05.2008 (Пт) 21:34

Нуу... мнение других зависит от многих факторов. Например от того, сколько файлов, как часто происходят изменения и т.п.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 03.05.2008 (Сб) 3:21

Хакер
*yf ghfdf[ ghj[j;tuj*
yfcnjzobq ghjuhfvvbcn dctuj ,jbncz b ybxtuj yt endth;lftn)
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 03.05.2008 (Сб) 10:20

Хакер ну не разводи ты парню палемику.
Просит же помоги. Покажи какой-нть объект, работающий с файлами, их размером и т.д.
Я не силен в VB но на VBA писал такое с легкостью. Использовал FileSystemObject и File. Если в VB вс также, то помоги ты просто ему и все. :)
Пишите жизнь на чистовик.....переписать не удастся.....

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

Сообщение Хакер » 03.05.2008 (Сб) 12:27

Писать готовый код за него никто не будет. Да и неполезно это, давать людям готовый код. Привыкают, и потом вообще отучивают делать что-либо самостоятельное.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

oskolok_vatbI
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 112
Зарегистрирован: 07.07.2007 (Сб) 16:13
Откуда: г. Казань

Сообщение oskolok_vatbI » 03.05.2008 (Сб) 13:02

Я не очень хорошо разбираюсь в вопросах программирования, но мне кажется я бы делал что-то следующее:
1) Рекурсией искал в папке файлы по маске (на форуме примеры точно есть).
2) Наверняка есть функция определения размера файла, использовал бы ее для каждого файла, найденого в предыдущем шаге.
3) Сложил бы все полученные размеры.
Если я не прав - более опытные люди меня поправят.

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 03.05.2008 (Сб) 13:22

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

Да никто и не говорит писать за него код. НАПРАВЬ куда надо.
Говорю же ищите по FILESYSTEMOBJECT. НА воруме куча примеров.
В нем точно есть рзмерыфайлов.
Для начала создай объект FSO, далее получи папку GETFolder, далее
for each file in folder
размер=размер + размер
next file
При необходимости можно добавить файлы по маске. В любом случае f1 всегда, повторяю ВСЕГДА помогал. Набросай чтонть, а вот с готовым кодом все помогут.
Да ХАКЕР?
Пишите жизнь на чистовик.....переписать не удастся.....

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 03.05.2008 (Сб) 13:28

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

SLIM
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1840
Зарегистрирован: 04.04.2008 (Пт) 18:21
Откуда: Краснодар

Сообщение SLIM » 03.05.2008 (Сб) 13:36

Lotreck
Не, так не пойдет.
Если ты реально
Да я вообще не знаю с какой стороны подступиться!
Специальной функции нет.
Сколько файлов будет в момент считывания тоже неизвестно.

То и изучать надо САМОМУ.
Когданть, когда будешь писать проэкт более громкий тоже будешь все кирпичики собирать??? :shock: Пиши сам. САМ! САМ! САМ!
Пишите жизнь на чистовик.....переписать не удастся.....

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 03.05.2008 (Сб) 13:59

Lotreck писал(а):Интересующий меня пример не является уникальным, и наверняка уже давным давно разработан, опробован и вылизан и место ему в фаге. Тратить неделю времени на создание того что уже есть и сделано лучше чем это получится у меня не вижу смысла. А фаг в одну страницу это издевательство над новичками.


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

Но, на мой взгляд, неверна сама постановка задачи. Это что же, ничего не известно, какие у файлов имена, куда они пишутся, при каких условиях меняются?

А заставить юзверей писать файлы под определёнными именами в определенное место никак нельзя?

Кстати, есть несколько функций, которые отлавливают уведомления об изменениях в папке, в том числе, и во вложенных:

Код: Выделить всё

Public Const FILE_NOTIFY_CHANGE_ATTRIBUTES = &H4
Public Const FILE_NOTIFY_CHANGE_DIR_NAME = &H2
Public Const FILE_NOTIFY_CHANGE_FILE_NAME = &H1
Public Const FILE_NOTIFY_CHANGE_SIZE = &H8
Public Const FILE_NOTIFY_CHANGE_LAST_WRITE = &H10
Public Const FILE_NOTIFY_CHANGE_SECURITY = &H100
Public Const FILE_NOTIFY_CHANGE_ALL = &H4 Or &H2 Or &H1 Or &H8 Or &H10 Or &H100

Public Declare Function FindFirstChangeNotification Lib "kernel32" Alias "FindFirstChangeNotificationA" (ByVal lpPathName As String, ByVal bWatchSubtree As Long, ByVal dwNotifyFilter As Long) As Long
Public Declare Function FindCloseChangeNotification Lib "kernel32" (ByVal hChangeHandle As Long) As Long
Public Declare Function FindNextChangeNotification Lib "kernel32" (ByVal hChangeHandle As Long) As Long
Public Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long
Public Declare Function ResetEvent Lib "kernel32" (ByVal hEvent As Long) As Long


Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 03.05.2008 (Сб) 14:51

Есть такой вариант. Правда не работает, ни результата, ни сообщений об ошибке, то ли сам подход неверный, то ли где ошибка.
Пока не разобрался. Как уже говорил впервые с этим сталкиваюсь, и знаний недостаточно.

Код: Выделить всё
Private Sub Form_Load()
Dim a$
If Dir("c:\folder\*.txt") = vbNullString Then
MkDir ("c:\folder")
ChDir ("c:\folder")
a = "aaaaaa"
Open "c:\folder\file_1.txt" For Output As #1
Print #1, a
Close #1
Open "c:\folder\file_2.txt" For Output As #2
Print #2, a
Close #2
End If
End Sub

Private Sub Command1_Click()
Dim a() As String
Dim dirs$
Dim tipe$
Dim summa%
Dim count%
dirs = "c:folder\"
tipe = "*.txt"
i = Dir(dirs & tipe)
Do While i <> ""
    i = Dir
    ReDim Preserve a(Counter)
    a(Counter) = i
    summa = summa + FileSystem.FileLen(dirs & a(Counter))
    Counter = Counter + 1
Loop
MsgBox "Сумма всех файлов с расширением " & Mid(tipe, 2, Len(tipe)) & " в папке " & dirs & " равна " & summa & " байт ", , "отчет"
End Sub

Alexanbar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1727
Зарегистрирован: 13.04.2004 (Вт) 23:04
Откуда: Волгоградская обл.

Сообщение Alexanbar » 03.05.2008 (Сб) 15:27

Lotreck писал(а):Есть такой вариант. Правда не работает, ни результата, ни сообщений об ошибке, то ли сам подход неверный, то ли где ошибка.
Пока не разобрался. Как уже говорил впервые с этим сталкиваюсь, и знаний недостаточно.

Код: Выделить всё
Private Sub Form_Load()
Dim a$
If Dir("c:\folder\*.txt") = vbNullString Then
MkDir ("c:\folder")
ChDir ("c:\folder")
a = "aaaaaa"
Open "c:\folder\file_1.txt" For Output As #1
Print #1, a
Close #1
Open "c:\folder\file_2.txt" For Output As #2
Print #2, a
Close #2
End If
End Sub

Private Sub Command1_Click()
Dim a() As String
Dim dirs$
Dim tipe$
Dim summa%
Dim count%
dirs = "c:folder"
tipe = "*.txt"
i = Dir(dirs & tipe)
Do While i <> ""
    i = Dir
    ReDim Preserve a(Counter)
    a(Counter) = i
    summa = summa + FileSystem.FileLen(dirs & a(Counter))
    Counter = Counter + 1
Loop
MsgBox "Сумма всех файлов с расширением " & Mid(tipe, 2, Len(tipe)) & " в папке " & dirs & " равна " & summa & " байт ", , "отчет"
End Sub



Код: Выделить всё
If Dir("c:\folder\*.txt") = vbNullString Then
MkDir ("c:\folder")
....
end if


А если dir("c:\folder"\*.doc)<>vbnullstring тоже папку создавать, хоть она уже есть?

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

Сообщение Хакер » 03.05.2008 (Сб) 15:31

Как уже говорил впервые с этим сталкиваюсь, и знаний недостаточно.

Если знаний недостаточно - задавай соответсвующие вопросы. Не выпрашивай готовый код и не выкладывай готовый неработающий, а именно задавай вопросы.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 03.05.2008 (Сб) 16:09

Код: Выделить всё
If Dir("c:\folder\*.txt") = vbNullString Then
MkDir ("c:\folder")

Это упрощенный вариант для данного примера. с этим я разберусь.
Насчет вопросов. не работает и все, какие могут быть вопросы.

dr.MIG
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1441
Зарегистрирован: 18.12.2004 (Сб) 9:53
Откуда: г.Ярославль

Сообщение dr.MIG » 03.05.2008 (Сб) 16:31

На беглый взнляд:
dirs = "c:folder\", а надо dirs = "c:\folder\". И i = Dir в цикле вставь не первой, а последней строчкой.
Salus populi suprema lex

Lotreck
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 19.03.2008 (Ср) 14:59

Сообщение Lotreck » 03.05.2008 (Сб) 17:16

Диагноз доктора оказался верным. Лечение закончилось успешно.
Всем спасибо!


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 71

    TopList