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

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

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

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

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

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

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

Буду очень признателен за живой пример. Спасибо.
Вложения
Тип файла: 7z ПримерПоиск.7z (24.4 Кб, 10 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Блог
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
12101 / 4961 / 791
Регистрация: 07.08.2010
Сообщений: 14,574
Записей в блоге: 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
12101 / 4961 / 791
Регистрация: 07.08.2010
Сообщений: 14,574
Записей в блоге: 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
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
22.08.2017, 13:17
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Блоги программистов
Модель полного двоичного суматора с помощью логических операций (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
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
Angular vs React vs Vue.js
BasicMan 03.01.2025
О, друзья-разработчики и просто любопытные читатели! Сегодня мы отправимся в увлекательное путешествие по миру фронтенд-разработки, и первой остановкой станет Angular – этакий строгий немецкий. . .
Сравнение микросервисов и монолита
cpp_developer 03.01.2025
Достоинства и недостатки микросервисной архитектуры Микросервисная архитектура представляет собой современный подход к построению программных систем, где приложение разбивается на набор небольших. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru