С Новым годом! Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/34: Рейтинг темы: голосов - 34, средняя оценка - 4.71
393 / 137 / 37
Регистрация: 16.03.2013
Сообщений: 1,497
1

Поиск файла в сетевой директории командой из формы

18.08.2017, 10:27. Показов 6482. Ответов 65
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день всем!
Подскажите пожалуйста, можно ли выполнить поиск файла с заданным названием, который находится в сетевой папке предприятия и используется для работы производственными подразделениями.

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

На сетевом диске М:\ у каждого из подразделений имеется своя папка например П1;П2 и П3., то есть путь к папкам получается такой :М:\П1 или М:\П2 или М:\П2.

Возможно ли автоматизировать поиск нужного файла в нужной директории по команде из формы.
В примере вобщем-то интуитивно понятно в чем суть вопроса.
Сложность в том еще, что в папках П1, П2 и П3 имеется несколько десятков подпапок, нужно чтобы в них поиск тоже производился.Вот.

Буду очень признателен за живой пример. Спасибо.
Вложения
Тип файла: 7z ПримерПоиск.7z (24.4 Кб, 10 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.08.2017, 10:27
Ответы с готовыми решениями:

Поиск файла в директории
Вот у меня есть две кнопки с такими кодами: java7 if (System.IO.File.Exists("C:\\Program...

Поиск файла в конкретной директории
Добрый день. Просьба подсказать, каким образом можно проверить наличие/отсутствие файла в...

Поиск файла в директории и всех вложенных подкаталогах
Как сделать поиск одного файла по имени в директории и поддиректориях и последуещее отображение в...

Поиск по сигнатуре заданного файла в указанной директории
Помогите пожалуйста с задачкой... Поиск по сигнатуре заданного файла в указанной директории....

65
393 / 137 / 37
Регистрация: 16.03.2013
Сообщений: 1,497
18.08.2017, 13:23  [ТС] 2
Изменил немного функционал в примере, теперь нужно просто поочередно в каждой из 3-х директорий проверить имя файла которое совпадает с указанным в поле [Деталь] по нажатию кнопки. Сам поискал решение, вроде как функцией Dir можно воспользоваться, вот только подойдет ли она в моем случае? Народ помогите, жизненно важно. хотя бы примерчик подобный...
Вложения
Тип файла: 7z ПримерПоиск.7z (27.4 Кб, 7 просмотров)
0
Эксперт MS Access
26818 / 14497 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
18.08.2017, 18:31 3
Лучший ответ Сообщение было отмечено alvk как решение

Решение

Цитата Сообщение от Braser Посмотреть сообщение
теперь нужно просто поочередно в каждой из 3-х директорий проверить имя файла которое совпадает с указанным в поле [Деталь] по нажатию кнопки
Не нужны там 3 кнопки, достаточно одной. Если файл в любой из них, проверка прекращается.

В массиве path пути к папкам, измените на правильные. В строке Dir задано любое расширение файла: "*". Замените на правильное, например "xls" или "txt".
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Кнопка4_Click()
    Dim LResult As String, path, i
    path = Array("L:\cam_mtp", "L:\cam_mtp2", "L:\cam_mtp3")
    For i = 0 To UBound(path)
        LResult = Dir(path(i) & "\" & Me.Деталь & ".*")
        If LResult <> "" Then
            MsgBox "Файл найден в папке " & path(i)
            Exit Sub
        End If
    Next
    MsgBox "Файл не найден в указанных папках"
End Sub
2
547 / 274 / 50
Регистрация: 03.04.2015
Сообщений: 926
19.08.2017, 00:08 4
Можно использовать для этой цели именно сетевой путь к диску:
\\server\Folder\*.xls
тогда без разницы какой там у пользователя путь на машине
0
393 / 137 / 37
Регистрация: 16.03.2013
Сообщений: 1,497
21.08.2017, 07:00  [ТС] 5
Спасибо за ответ, есть ньюанс. Одна загвоздка, если допустим один и тот же файл используют в работе два подразделения, но файл этот находится в первом подразделении по такому пути L:\cam_mtp2, а в другом L:\cam_mtp3\Стойки, то он указывает только на первый найденный вариант., а возможно ли реализовать поиск так, чтобы были показаны эти все найденные файлы с указанием пути их нахождения, по типу поиска в Windows? Ну или хотя бы без указания пути, чтобы была возможность "пометить" их как неактуальные для производства? Это было бы самое то что нужно.

Добавлено через 3 минуты
Пометить, значит просто добавить к наименованию какой то символ, или дописать в конце например "Стойка 123.123.001_изм", чтобы технолог перед запуском в работу понял, что начальный файл КД изменен и нужно изменить или полностью заменить свой файл в базе

Добавлено через 7 минут
mobile, вы говорите что не нужны три кнопки, но у вас поиск прекращается после 1 положительного результата, мне в моем случае нужно найти файлв каждой из этих директорий и в их подпапках и показать пользователю. Получается все таки нужны 3 кнопки. Для поиска в каждой из директорий своя кнопка?
0
Эксперт MS Access
26818 / 14497 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.08.2017, 08:02 6
Достаточно одной кнопки
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Кнопка4_Click()
    Dim LResult As String, path, i, s
    path = Array("L:\cam_mtp", "L:\cam_mtp2", "L:\cam_mtp3")
    For i = 0 To UBound(path)
        LResult = Dir(path(i) & "" & Me.Деталь & ".*")
        If LResult <> "" Then
            s = "Файл найден в папке " & path(i) & vbcrlf
        End If
    Next
    If s = "" Then
        MsgBox "Файл не найден в указанных папках"
    else
        MsgBox s
    end if
End Sub
1
393 / 137 / 37
Регистрация: 16.03.2013
Сообщений: 1,497
21.08.2017, 08:35  [ТС] 7
Не хотит все равно искать далее первого полученного результата...
вы здесь не пропустили символ ""
Visual Basic
1
LResult = Dir(path(i) & "" & Me.Деталь & ".*")
или так и должно быть? Тем не менее не хочет в остальных искать и во вложенных тоже

Добавлено через 10 минут
Скажите можно ли вывести результат поиска не в виде MsgBox, а в виде окна поиска , в котором можно сразу переименовать найденный файл(ы)?
0
Эксперт MS Access
26818 / 14497 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.08.2017, 08:36 8
Рассеяность и форум глотает слэши
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Кнопка4_Click()
    Dim LResult As String, path, i, s
    path = Array("L:\cam_mtp", "L:\cam_mtp2", "L:\cam_mtp3")
    For i = 0 To UBound(path)
        LResult = Dir(path(i) & "\" & Me.Деталь & ".*")
        If LResult <> "" Then
            s = s & "Файл найден в папке " & path(i) & vbcrlf
        End If
    Next
    If s = "" Then
        MsgBox "Файл не найден в указанных папках"
    else
        MsgBox s
    end if
End Sub
2
393 / 137 / 37
Регистрация: 16.03.2013
Сообщений: 1,497
21.08.2017, 08:39  [ТС] 9
По сути если использовать MsgBox, то существующая схема работы не меняется, пользователь запускает поиск, получает сообщение, начинает идти по указанному пути к папке(ам) содержащим файл, по сути все так же и остается, разве что известен конкретный путь. Хотелось бы именно реализовать задуманное по схеме: нашел> переименовал> закрыл. Или так не получится сделать?
0
Эксперт MS Access
26818 / 14497 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.08.2017, 09:03 10
Получится и так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Кнопка4_Click()
    Dim LResult As String, path, i, s, newname
    path = Array("L:\cam_mtp", "L:\cam_mtp2", "L:\cam_mtp3")
    For i = 0 To UBound(path)
        LResult = Dir(path(i) & "\" & Me.Деталь & ".*")
        If LResult <> "" Then
            s = s & "Файл найден в папке " & path(i) & vbcrlf
            newname = InputBox("Задайте новое имя файлу " & Me.Деталь, , LResult)
            Name path(i) & "\" & LResult As path(i) & "\" & newname
       End If
    Next
    If s = "" Then
        MsgBox "Файл не найден в указанных папках"
    end if
End Sub
1
393 / 137 / 37
Регистрация: 16.03.2013
Сообщений: 1,497
21.08.2017, 11:01  [ТС] 11
Однозначно, вариант решения хороший, но не ищет в подпапках этих директорий, файлы и там могут находится. и почему то на отмену переименования файла выдает ошибку: "Файл уже существует".

Добавлено через 1 час 9 минут
Подскажите пожалуйста, как указать в коде VBA, чтобы поиск во вложенных папках тоже производился, это очень важная часть Марлезонского балета.
0
Эксперт MS Access
26818 / 14497 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.08.2017, 11:53 12
Обойти отказ от переименования: вставьте после строки с инпутбоксом
Visual Basic
1
2
3
4
            newname = InputBox("Новое имя файла " & Me.Деталь, , LResult)
            If newname <> "" And newname <> path(i) & "\" & LResult Then
                Name path(i) & "\" & LResult As path(i) & "\" & newname
            End If
Цитата Сообщение от Braser Посмотреть сообщение
одскажите пожалуйста, как указать в коде VBA, чтобы поиск во вложенных папках тоже производился, это очень важная часть Марлезонского балета.
Если список папок/подпапок постоянный, то их можно включить в массив. Если может меняться, но уровень вложенности постоянный, то можно сделать цикл обхода диром или получить список подпапок с помощью FileSystem Object. Если же уровень вложенности меняется, то надо делать рекурсивную процедуру полного обхода дерева папок
1
393 / 137 / 37
Регистрация: 16.03.2013
Сообщений: 1,497
21.08.2017, 12:56  [ТС] 13
Три директории в корне постоянные L:\cam_mtp1(2-3), количество папок в них может увеличиваться, либо уменьшаться, каждая вложенная папка содержит три вида файлов - чертежи и файлы для обработки и использования. Общее количество файлов в папке может достигать, думаю не более 40-50. Создание папок во вложенных папках запрещено регламентом. Т.е. максимальное что может быть L:\cam_mtp1\ ZF1150 \ Стойка123.456.001.CDW - файл чертежа, Стойка123.456.001.dxf - файл для обработки, Стойка123.456.001.cp - станочный. Вот такие 3 вида файлов соответственно на все детали в папке.

Добавлено через 22 минуты
ЭЭххх, еще бы понимать, как FSO сюда прикрутить... или цикл обхода Dir - ом. так глубоко я не копал еще,имею чисто поверхностное представление.
0
10916 / 5608 / 1425
Регистрация: 05.10.2016
Сообщений: 15,852
21.08.2017, 13:29 14
Цитата Сообщение от Braser Посмотреть сообщение
ЭЭххх, еще бы понимать, как FSO сюда прикрутить...
Посмотрите пример тут ...
Чутка переделать и будет то что вам нужно.
1
Эксперт MS Access
26818 / 14497 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.08.2017, 14:06 15
Если, как Вы пишете уровень вложенности всегда 2 - папка>подпапка, то можно так:
1. Исправляем головную процедуру
2. Создаем функцию поиска и замены в подпапках
Visual Basic
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
Private Sub Кнопка4_Click()
    Dim LResult As String, path, i, s, newname
    path = Array("L:\cam_mtp", "L:\cam_mtp2", "L:\cam_mtp3")
    For i = 0 To UBound(path)
        LResult = Dir(path(i) & "\" & Me.Деталь & ".*")
        If LResult <> "" Then
            s = s & "Файл найден в папке " & path(i) & vbcrlf
            newname = InputBox("Новое имя файла " & Me.Деталь, , LResult)
            If newname <> "" And newname <> path(i) & "\" & LResult Then
                Name path(i) & "\" & LResult As path(i) & "\" & newname
            End If
       End If
       
       'Ищем в подпапках
       s = s & FindSubFolder(path(i),  Me.Деталь)
    Next
    If s = "" Then
        MsgBox "Файл не найден в указанных папках"
    end if
End Sub
 
Public Function FindSubFolder(fold As String, file)
    Dim fso As Object, folder As Object, subfold As Object
    Dim s, c, i, newname
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set folder = fso.GetFolder(fold)
    c = folder.SubFolders.Count
    For Each subfold In folder.SubFolders
        If fso.FileExists(subfold & "\" & file) Then
            newname = InputBox("Новое имя файла " & file, , subfold & "" & file)
            If newname <> "" And newname <> subfold & "\" & file Then
                Name subfold & "\" & file As newname
            End If
            FindSubFolder = FindSubFolder & newname
        End If
    Next
End Function
Возможно где-то потерялись слэши. Так работает форум...
1
393 / 137 / 37
Регистрация: 16.03.2013
Сообщений: 1,497
21.08.2017, 14:24  [ТС] 16
Спасибо за ссылку, будем изучать, да прибудет со мной сила...

Добавлено через 6 минут
выдал ошибку компиляции
ByRef argument tipe mismatch
ругается сюда
Visual Basic
1
s = s & FindSubFolder(path(i), Me.Деталь)
0
Модератор
Эксперт MS Access
12106 / 4966 / 791
Регистрация: 07.08.2010
Сообщений: 14,591
Записей в блоге: 4
21.08.2017, 14:35 17
переменная path(i) типа variant. а к заголовке функции --строка string

Visual Basic
1
2
3
4
5
 Dim LResult As String, path, i, s, newname
    path = Array("L:\cam_mtp", "L:\cam_mtp2", "L:\cam_mtp3")
 
''''
Public Function FindSubFolder(fold As String, file)
1
393 / 137 / 37
Регистрация: 16.03.2013
Сообщений: 1,497
22.08.2017, 10:47  [ТС] 18
И как подправить чтобы заработала ?
0
Модератор
Эксперт MS Access
12106 / 4966 / 791
Регистрация: 07.08.2010
Сообщений: 14,591
Записей в блоге: 4
22.08.2017, 10:52 19
все та жа правая МЫША
Миниатюры
Поиск файла в сетевой директории командой из формы  
1
393 / 137 / 37
Регистрация: 16.03.2013
Сообщений: 1,497
22.08.2017, 13:17  [ТС] 20
Лучший ответ Сообщение было отмечено mobile как решение

Решение

все загадками говорите...
1
22.08.2017, 13:17
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.08.2017, 13:17
Помогаю со студенческими работами здесь

Организовать поиск заданного файла в указанной директории и ее поддиректории
Доброго времени суток, нужна помощь с выполнением задания поиска указанного файла и в директории (...

Как сделать поиск файла в выбранной директории и открыть в мемо1
Хочу сделать поиск файла по названию, который введу в мемо или едит, в выбранной директории...

Как осуществить поиск файла во всех папках данной директории?
Добрый день! Как осуществить поиск файла во всех папках данной директории? Есть директория, в ней...

Мониторинг файлов в сетевой директории
Здравствуйте. Подскажите, что не так. Есть замечательный инструмент FileSystemWatcher Все отлично...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
Полезные поделки на Arduino, которые можно сделать самому
raxper 06.01.2025
Arduino как платформа для творчества Arduino представляет собой удивительную платформу для технического творчества, которая открывает безграничные возможности для создания уникальных проектов. Эта. . .
Подборка решений задач на Python
IT_Exp 06.01.2025
Целью данной подборки является предоставление возможности ознакомиться с различными задачами и их решениями на Python, что может быть полезно как для начинающих, так и для опытных программистов. . . .
С чего начать программировать микроконтроллер­­ы
raxper 06.01.2025
Введение в мир микроконтроллеров Микроконтроллеры стали неотъемлемой частью современного мира, окружая нас повсюду: от простых бытовых приборов до сложных промышленных систем. Эти маленькие. . .
Из чего собрать игровой компьютер
inter-admin 06.01.2025
Сборка игрового компьютера требует особого внимания к выбору комплектующих и их совместимости. Правильно собранный игровой ПК не только обеспечивает комфортный геймплей в современных играх, но и. . .
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного сумматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­­­­­­­­­­­­­­­­­­­­­­­­­х­р­о­н­­н­­­ы­­й счётчик с управляющим сигналом зад
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru