|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Нужно перебрать все папки в текущем каталоге не заходя в подкаталоги. Делаю так: Код: plaintext 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2008, 14:06 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
в справке написано, что это невозможно Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2008, 14:22 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Не совсем так. На данный момент удалось выяснить, что это Код: plaintext 1. 2. 3. 4. 5. 6.
Работает. Но папки, начинающиеся с цифры она не видит. Впрочем, и так годится, но хотелось бы узнать почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2008, 14:34 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
пишут, что "Рекуррентное применение Dir (в последующих вызовах уже без аргументов) используется только для перечисления файлов" это из книги по VB 6.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2008, 14:48 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
вероятно у них атрибут не только "vbDirectory" I Have Nine Lives You Have One Only THINK! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2008, 14:52 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Но это же работает: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Ошибка мной обнаружена: строку Tmp = Dir() нужно было поместить после запоминания первого элемента. Иначе первый путь (созданный строкой Tmp = Dir("D:\", vbDirectory)) просто не запоминался. Попутно встал еще один вопрос: Как вместо пути Dir("d:\", vbDirectory) подставить текущий путь? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2008, 15:02 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
klen_ "Рекуррентное применение Dir (в последующих вызовах уже без аргументов) используется только для перечисления файлов" это из книги по VB 6.0 Как хорошо что я не читал таких книжек... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2008, 15:09 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Dimon111 Попутно встал еще один вопрос: Как вместо пути Dir("d:\", vbDirectory) подставить текущий путь? F1 и смотреть: App.Path CurDir ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2008, 15:10 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
klen_в справке написано, что это невозможно Код: plaintext 1.
Для перебора файлов/папок не заходя в подкаталоги даром не нужен рекурсивный вызов чего либо. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2008, 15:11 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Как обойтись без рекурсии? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2008, 15:22 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
а книга называется Карoль "Справочник с примерами" Visual Basic 6.0 страница 81 далее автор книги пишет, что "Однако перечислить, например субкаталоги данного каталога с помощью такого кода, как Код: plaintext 1. 2. 3. 4. 5.
виноват, неверно понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2008, 15:35 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
авторнельзя. Вызовы Dir без аргументов будут возвращать подряд и файлы и каталоги. Но можно проверить атрибут с помощью GetAttr и узнать что это: файл или каталог I Have Nine Lives You Have One Only THINK! ... |
|||
:
Нравится:
Не нравится:
|
|||
12.02.2008, 16:50 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Как все - таки релизовать Dir из текущего катклога, чтобы не указывать конкретного пути? App.Path, CurDir выдает лишь текущий рабочий каталог (папку в которой назодится программа): Dir(App.Path, vbDirectory). Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
13.02.2008, 10:35 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Недостаток/преимущество CurDir(), App.Path в том, что они возвращаю значения в формате "x:\<>foldername". Это есть адрес и имя конкретной папки, а не ссылка на ее "внутренности". :-) Добавь к этому в вызове функции Dir символ "\" - и он уже работает внутри папки. :-) Dir(CurDir()+"\") ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2008, 16:44 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Чего-то не понял. Зачем вам рекурсии-то, раз в подкаталоги не заходите? Вот у вас: " Нужно перебрать все папки в текущем каталоге не заходя в подкаталоги ..." ... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2008, 16:58 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
03.06.2008, 17:12 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Ну и на API Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49.
... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2008, 13:13 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
AndreyMpНу и на API По скорости это, кстати, не отличается от Dir или FileSystemObject... ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2008, 17:27 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Тут уместно вспомнить, что FileSystemObject и есть собрание всех этих API, удобное для потребления и позволяющее не мучиться с длинным и нетривильным для быстрого восприятия кодом. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2008, 18:05 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Несколько упрощу свой пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Не считая описания переменных, всего четыре строчки, включая Debug. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2008, 19:11 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
> Автор: VladConn > Несколько упрощу свой пример: > > > Dim objFSO As New FileSystemObject > 'Dim objFolder As Folder Нет, ну если упрощать, так упрощать ;) Эта строка не нужна, т.к нет проверки на валидность возвращаемого значения > 'Set objFolder = objFSO.GetFolder("C:\") > И поэтому вызов можно подставить сразу в цикл > For Each objFolder In objFSO.GetFolder("C:\").SubFolders > Debug.Print objFolder.Name > Next objFolder > Не считая описания переменных, всего четыре строчки, включая Debug. Получилось четыре считая объявление переменной. :) Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2008, 19:33 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Угу! Тем более! :0) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2008, 19:56 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
авторAndreyMp Ну и на API По скорости это, кстати, не отличается от Dir или FileSystemObject... Ну это я так. Можно считать, для коллекции. Конечно проще пользоваться FSO. Сам ей часто пользуюсь. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2008, 10:29 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Им :0) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2008, 16:45 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Ну да, File System Object, конечно им . ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2008, 10:35 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
AndreyMp, objFSO As New FileSyste - не определён, и в references нет FSO! Пожалуйста,дайте работающий код! Если можно, помогите решить задачу: Есть папка "А", содержащая только папки "В", содержащие файлы "С". Нужно в каждой "С" вызвать первый файл для его обработки. Все имена - цифровые, тип файлов - ".dcm". Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2012, 08:33 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, > и в references нет FSO! а скрин этого можно? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2012, 09:06 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
катастрофа, Вот всё,что там есть на "F". ... |
|||
:
Нравится:
Не нравится:
|
|||
23.09.2012, 15:24 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123 А Вы поищите на "S" Вас должно заинтересовать Microsoft Scripting Runtime ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2012, 08:21 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Можно без FSO, с помощью консольной команды DIR. Пример тут, можно допилить под конкретную задачу: http://www.cyberforum.ru/vba/thread645716-page2.html#post3413444 Нужно в каждой "С" вызвать первый файл для его обработки. " - Вы имеете в виду первый при сортировке по алфавиту, самый ранний или самый поздний файл? В любом случае, это решается ключом сортировки в команде DIR: Код: plaintext 1. 2. 3.
Ну а чтобы выделить только один файл из папки, можно сложить пути файлов в коллекцию, используя в качестве ключа путь к папке (т.е. путь файла до последнего "\"). ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2012, 13:37 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Казанский, Большое спасибо за помощь всем! Я сделал с Dir, список всех подпапок создаётся, но не передаётся во вторую часть, попытка декларировать List1 As Control не проходит. Что можно сделать? Dim X As String, A As String, i As Single, Z As String Private Sub form_load() i = 0 Y = "d:\A\" X = Dir(Y, 16) Do While Not X = "" List1.List(i) = X + Chr(10) X = Dir i = i + 1 Loop Form1.Visible = True List1.Visible = True k = i - 1 End Sub Private Sub command1_click() For k = 2 To i ' пропуск "." & ".." Z = Y + List1.List(k) G = Dir(Z, vbDirectory) 'Bad file namt or number Next k 'передача файла на обработку End Sub ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2012, 23:24 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 02:15 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Это уже было! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 09:47 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123Это уже было! fel123, скажите, а весь этот код он в какой-нибудь процедуре записан? Или вот так как есть в разделе объявлений модуля? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 09:58 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Понял - нужно добавить sub form_load(). Код отлично работает. СПАСИБО ВСЕМ! Но у меня ещё вопрос по работе. Я вообще-то электронщик (военный), но с 69 года работаю в медицине. Программирую по необходимости. Ситуация такая: раньше eFilm создавал свои таблицы в acsses97, но в новой версии используется sql server 2005 express. Поскольку это форум sql, то прошу помочь мне прочитать таблицы этого sql. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 10:21 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Модератор: Создавайте отдельный топик ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 10:31 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
mds_world, Я рано обрадовался, но виноват сам - ошибся в постановке задачи. На самом деле структура такая: папка A содержит папки B (Study), каждая B содержит папки C (Series), и только каждая C содержит файлы D (Images). Я помучился, добавил вторую часть кода, но не могу понять, почему вместо первого файла D, соответствующего папке A, получаю список всех D, соответствующих папке A. Т.е. во второй части кода не проходит цикл по папкам A (цикл по i)? Уже мозги плавятся! SOS! Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
Модератор: Учимся использовать тэги оформления кода - FAQ ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 22:59 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
VladConn, ... |
|||
:
Нравится:
Не нравится:
|
|||
25.09.2012, 23:28 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123 , и каков вопрос? Если про Dim ... as New ... , то видимо HandKot fel123 А Вы поищите на "S" Вас должно заинтересовать Microsoft Scripting Runtime ... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2012, 00:32 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, попробуйте вариант с рекурсивной процедурой обхода папок Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.09.2012, 01:06 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
mds_world, Привет! Этот код выдаёт всё подряд: и файлы, и папки. Если закомментирова второй Debug.Print, то выдаются все файлы подпапок (С). Для работы мне нужно из каждой подпапки (B) исходной папки (А) по одному из множества файлов подпапок (C), т.е. каждой (B) cоответствует один файл. В GOOGLE нашел интересный момент: For Each element [ As datatype ] In group [ statements ] [ Exit For ] [ statements ] Next [ element ] Компоненты: element Обязателен в операторе For Each. Необязателен в операторе Next. Переменная. Используется для циклическогопрохода (итерации) элементов коллекции. datatype Обязателен, если еще не объявлен элемент element. Тип данных element. group Обязательный компонент. Объектная переменная. Указывает на коллекцию, применительно к элементам которой будут повторяться операторы statements. statements Необязательный компонент. Один или несколько операторов, стоящих между операторами For Each и Next и выполняющихся применительно к каждому элементу group. Exit For Необязательный компонент. Передача управления из цикла For Each. Next Обязательный компонент. Завершение определения цикла For Each. Источник: http://msdn.microsoft.com/ru-ru/library/5ebk1751%28v=vs.90%29.aspx По идее, нужно прерывать цикл по B, как только нашёлся первый ".dcm". Можно, конечно, сделать фильтр списка файлов на уникальность элемента B, но исполняемый код будет очень долго работать. А мне ещё файлы обработать нужно! Я пока не понимаю, как работают циклы в FSO, т.е. не знаю, как вставить Exit For. Если есть время, помогите! Спасибо! P.S. Пока писал, подумал, что, наверное, в цикле по oFile можно проверить атрибут, но есть-ли в FSO что-то типа File.Attribute.Name? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2012, 18:47 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Вот так эта часть Код: vbnet 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.09.2012, 22:33 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Казанский, Доброго времени суток! Спасибо за науку. Только этот код выдает первые файлы всех подпапок последнего уровня, а нужно для каждой подпапки папки А только один файл. ОчевидноБ нужна внешняя процедура на уникальность имени подпапки В, что-то вроде Sub Filtr(Spath,Z) Const startB As String = ":\" Const endB As String = "\" x = InStr(sPath, startB) y = InStr(sPath, endB) Dim temrB As String Dim temrorB As String Mid(sPath, x, y - x) = tempB If tempB <> temporB Then tempB = temporB Exit For (если внутри, или z=False, если Sub) End If End Sub Я попытался так сделать, но запутался в логике. Как нужно? Ещё раз благодарю ВАС! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.09.2012, 22:36 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Модератор: fel123, еще раз предупреждаю про использование тэгов для оформления кода ... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2012, 01:16 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
> fel123, > На самом деле структура такая: папка A содержит папки B (Study), каждая B содержит папки C (Series), и только каждая C содержит файлы D (Images) ох уж енти ваенныя електронщыки ... могабукаф Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.09.2012, 19:23 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
скукотища, Наконец-то получилось то, что было нужно. Вот работающий код: Option Explicit Dim oFSO As Object Public temporB As String Public i As Integer, j As Integer Sub Form_load() i = 0 Const sPath As String = "d:\A\" Set oFSO = CreateObject("Scripting.FileSystemObject") Call recurse(sPath) End Sub Sub recurse(sPath As String) Dim oFolder As Object Dim oSubFolder As Object Dim oFile As Object Set oFolder = oFSO.GetFolder(sPath) For Each oFile In oFolder.Files Dim Nam As String If LCase(oFile.Name) Like "*.dcm" Then Nam = sPath & "\" & oFile.Name Call Filtr(Nam) Exit For End If Next oFile For Each oSubFolder In oFolder.SubFolders Call recurse(oSubFolder.Path) Next oSubFolder Call Osnova End Sub Sub Filtr(Nam) Dim x As Long, y As Long, z As Long Dim tempB As String x = InStr(Nam, ":\") y = InStr(x + 2, Nam, "\") z = InStr(y + 1, Nam, "\") tempB = Mid(Nam, y + 1, z - y - 1) If tempB <> temporB Then temporB = tempB List1.List(i) = Nam i = i + 1 End If End Sub Sub Osnova() For j = 0 To List1.ListCount 'Обработка Next j End Sub Остались два нерешенных вопроса: как скрыть окно Immediate и как перед вызовом Osnova очистить память от мусора FSO (Nothing не проходит). ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 12:05 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, "как скрыть окно Immediate" - у этого окна должен быть крестик в правом верхнем углу. "как перед вызовом Osnova очистить память от мусора FSO" - Set его как New FileSystemObject, декларировать также, а не как Object. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 12:30 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123VladConn, Ссылочку поставь на Scripting... в проекте... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 12:35 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, Что это такое: Код: vbnet 1. 2. 3.
Что ты пытаешься вытащить этими манипуляциями? Части путей, имен, явок, расширений? А почему ты тогда не используешь готовые методы oFSO, зачем он тогда тебе? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 12:40 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, Тонкий намек: ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 12:47 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, Этот короткий код перечисляет все папки. Это не то, что нужно? Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 13:07 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, Этот код перечисляет все DCM файлы. Обратите внимание на отсутствие манипуляций со строковыми функциями. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 13:40 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Но это тоже не фонтан, потому что рекурсии могут приводить к переполнению памяти. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 13:42 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, Если нужен только один DCM файл, то: Код: vbnet 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 13:49 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
VladConn, Полное имя файла ".dcm" = "D:\A\B\C\*.dcm". Написанный mds_world код со вставкой Казанского выдаёт список первых файлов ".dcm", которые содержатся в папке уровня С для каждой папки В. Мне же нужно для каждой папки В получить один-единственный файл. Поскольку я не знаю свойств FSO, т.е. не умею из каждой А вытащить одно имя В и из этой В вытащить одно С, то должен фильтровыть выход на уникальность В. x = InStr(Nam, ":\") - разделитель D|A y = InStr(x + 2, Nam, "\") - разделитель A|B z = InStr(y + 1, Nam, "\") - разделитель B|C Далее получаю имя папки В и храню его в глобальной переменной до следующего вызова рекурсии. Относительно Immediate - при длинном списке мелькание на экране неприятно, а окно появляется после старта процедуры, т.е. как сделать выполнение невидимым? Спасибо за подсказку! P.s. Наверное, с Dir() или FindFirstFile было-бы проще - при первом вызове без аргументов они выдают первые имена. И второе - в стандарте DICOM для каждого исследования (Study) - своя папка А, для каждой прекции (Series) данного Study - своя папка B, для каждого слоя (Image) данной проекции - своя папка С. Image - файл ".dcm" - это картинка с преамбулой, которая мне, собственно, и нужна. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 20:41 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, Извиняюсь, не обратил внимания, что вторая страница уже заполнена, поэтому не прочитал предыдущие сообщения. Простите! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 20:55 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, Попробуйте мой код с добавлением exit for. Он должен выдавать не больше одного DCM файла в каждом субфолдере любого заданного корневого фолдера. Свойства же и методы FSO выпадают сами, если делать раннее связывание (в моем примере - раннее). Они все простые. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 23:15 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, Debug.Print замените на добавление в какой-нибудь список, лист бокс, текст бокс. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.10.2012, 23:17 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
VladConn, Ничего не изменяя, кроме "C:\" на "D:\A\", "с ходу" попробовал код 10522. Immediate осталось пустым. Буду разбираться - хотя код 15 работает, но появился спортивный интерес - может, начну разбираться в объектном программировании. До сих пор мне вполне хватало qBasic-a. И частный вопрос по VB6. В dir() рекурсия начинается со строчки "For A<>"." And A<>".." Then.....". По моему разумению, оба условия не могут появиться одновременно - они появляются при первом и втором проходе. Почему эта строчка всё-же работает? Получается, что я перестал понимать элементарную логику союза "и". Я пробовал заменять AND на OR но VB6 меня не понимает! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2012, 07:29 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, все правильно, ведь там сравнение "<>" а не "=" Согласно законам булевой алгебры это выражение можно переписать так Код: vbnet 1.
так понятнее? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2012, 08:46 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
Shocker.Pro, Спасибо, дошло! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2012, 17:43 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
VladConn, Попробовал проследить ход выполнения, но сразу споткнулся! Это Private Sub CommandButton1_Click() Debug.Print "A" GetSubFolders MY_ROOT End Sub не работает. Если убрать Button, то "А" напечатается два раза, но больше в Immediate ничего нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2012, 21:03 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123, >Попробовал проследить ход выполнения как через эф8? если так то без разницы как процедура называется, если нет как Вы интермедию видите? Зачем с интермедией экспериментируете? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2012, 21:15 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123VladConn, Попробовал проследить ход выполнения, но сразу споткнулся! Это Private Sub CommandButton1_Click() Debug.Print "A" GetSubFolders MY_ROOT End Sub не работает. Если убрать Button, то "А" напечатается два раза, но больше в Immediate ничего нет. CommandButton1 - это имя командной кнопки, которую я посадил на форму, чтобы можно было запустить код для Вас. Нажал на кнопку - и кофемолка заработала. У Вас это может быть другая кнопка с другим именем, а может и не кнопка, а может не ворона. Кнопки (а может и не кнопки) в VB обладают удивительной возможностью - событиями (собственно на этом и стоит мир и благополучие данного (и не только данного)) форума. Нажатие кнопки на кофемолке (сорри, на форме) и есть событие. Оно отделено от имени кнопки знаком подчеркивания и называется (в данном примере) Click. Кликнул на кнопку - и это событие произошло. В коде оно выглядит как процедура. Если Вы в нее вставите какой-нибудь код, то этот код исполнится, но только если Вы кликнете на эту кнопку (иногда даже если не только кликнете). Справедливости ради надо сказать, что разных-разных событий в языке VB - пруд пруди, так же как и имен различных кнопок (и не только кнопок), которые можно присваивать даже без священника. : 0) Пишите, если еще будут вопросы. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2012, 22:42 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123VladConn, Попробовал проследить ход выполнения, но сразу споткнулся! Это Private Sub CommandButton1_Click() Debug.Print "A" GetSubFolders MY_ROOT End Sub не работает. Если убрать Button, то "А" напечатается два раза, но больше в Immediate ничего нет. fel123, У Вас значение MY_ROOT должно быть Ваше какое-то. Вы его поставили в декларации этой константы или так и использовали моё наобум взятое ("G:\")? Значение должно быть именем входного каталога, библейской праматери всех подкаталогов, растущих под нашим светилом и содержащих нужные Вам DCM файлы. Может быть, ему подойдет значение "D:\". Попробуйте. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2012, 22:59 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
VladConn, Понял, что происходит. Если я, не меняя ничего, запускаю программу и смотрю на экран, то ничего и не вижу, поскольку идет обработка множества корневых папок диска С, что на экране не отражается. Только взглянув на блок и увидев, что трудится винчестер, я всй понял. Но на диске С нет ни одного файла ".dcm"! Подождал 10 мин., индикатор мигает, программа на экран ничего не выдаёт. Понял, что так не пойдёт. Сейчас прочитал в Google про кнопку. Ну не знал я раньше ничего про этот элемент, у меня ведь стандартный проект, стандартная форма и стандартный CommandBox! Я начинал экспериментировать с DriveListBox и т.д. , но понял, что для врачей это будет сложно - нужна готовая .exe, запустил и получил готовую таблицу. Буду работать с тем кодом, который работает. Спасибо всем за потраченное на меня время! ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2012, 23:43 |
|
Как перебрать все папки в текущем каталоге командой Dir
|
|||
---|---|---|---|
#18+
fel123VladConn, Понял, что происходит. Если я, не меняя ничего, запускаю программу и смотрю на экран, то ничего и не вижу, поскольку идет обработка множества корневых папок диска С, что на экране не отражается. Только взглянув на блок и увидев, что трудится винчестер, я всй понял. Но на диске С нет ни одного файла ".dcm"! Подождал 10 мин., индикатор мигает, программа на экран ничего не выдаёт. Понял, что так не пойдёт. Сейчас прочитал в Google про кнопку. Ну не знал я раньше ничего про этот элемент, у меня ведь стандартный проект, стандартная форма и стандартный CommandBox! Я начинал экспериментировать с DriveListBox и т.д. , но понял, что для врачей это будет сложно - нужна готовая .exe, запустил и получил готовую таблицу. Буду работать с тем кодом, который работает. Спасибо всем за потраченное на меня время! Да все ОК. Главное не победа, главное участие. Спасибо Вам за код! Навернулись слезы, ностальгия по 60-м, знаете ли. :0) Я так и не понял, мой код для Вас работает или нет? Все дело в корневом каталоге, который Вы укажете для константы, это здорово сэкономит время. Ничего плохого в том, что Вы не знакомы с VB, нет. Все всё понимают. Удачи. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2012, 00:12 |
|
|
start [/forum/topic.php?all=1&fid=60&tid=2157410]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
35ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
83ms |
get tp. blocked users: |
1ms |
others: | 323ms |
total: | 482ms |
0 / 0 |