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

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

18.08.2017, 10:27. Показов 6398. Ответов 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,491
18.08.2017, 13:23  [ТС] 2
Изменил немного функционал в примере, теперь нужно просто поочередно в каждой из 3-х директорий проверить имя файла которое совпадает с указанным в поле [Деталь] по нажатию кнопки. Сам поискал решение, вроде как функцией Dir можно воспользоваться, вот только подойдет ли она в моем случае? Народ помогите, жизненно важно. хотя бы примерчик подобный...
Вложения
Тип файла: 7z ПримерПоиск.7z (27.4 Кб, 7 просмотров)
0
Эксперт MS Access
26815 / 14494 / 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,491
21.08.2017, 07:00  [ТС] 5
Спасибо за ответ, есть ньюанс. Одна загвоздка, если допустим один и тот же файл используют в работе два подразделения, но файл этот находится в первом подразделении по такому пути L:\cam_mtp2, а в другом L:\cam_mtp3\Стойки, то он указывает только на первый найденный вариант., а возможно ли реализовать поиск так, чтобы были показаны эти все найденные файлы с указанием пути их нахождения, по типу поиска в Windows? Ну или хотя бы без указания пути, чтобы была возможность "пометить" их как неактуальные для производства? Это было бы самое то что нужно.

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

Добавлено через 7 минут
mobile, вы говорите что не нужны три кнопки, но у вас поиск прекращается после 1 положительного результата, мне в моем случае нужно найти файлв каждой из этих директорий и в их подпапках и показать пользователю. Получается все таки нужны 3 кнопки. Для поиска в каждой из директорий своя кнопка?
0
Эксперт MS Access
26815 / 14494 / 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,491
21.08.2017, 08:35  [ТС] 7
Не хотит все равно искать далее первого полученного результата...
вы здесь не пропустили символ ""
Visual Basic
1
LResult = Dir(path(i) & "" & Me.Деталь & ".*")
или так и должно быть? Тем не менее не хочет в остальных искать и во вложенных тоже

Добавлено через 10 минут
Скажите можно ли вывести результат поиска не в виде MsgBox, а в виде окна поиска , в котором можно сразу переименовать найденный файл(ы)?
0
Эксперт MS Access
26815 / 14494 / 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,491
21.08.2017, 08:39  [ТС] 9
По сути если использовать MsgBox, то существующая схема работы не меняется, пользователь запускает поиск, получает сообщение, начинает идти по указанному пути к папке(ам) содержащим файл, по сути все так же и остается, разве что известен конкретный путь. Хотелось бы именно реализовать задуманное по схеме: нашел> переименовал> закрыл. Или так не получится сделать?
0
Эксперт MS Access
26815 / 14494 / 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,491
21.08.2017, 11:01  [ТС] 11
Однозначно, вариант решения хороший, но не ищет в подпапках этих директорий, файлы и там могут находится. и почему то на отмену переименования файла выдает ошибку: "Файл уже существует".

Добавлено через 1 час 9 минут
Подскажите пожалуйста, как указать в коде VBA, чтобы поиск во вложенных папках тоже производился, это очень важная часть Марлезонского балета.
0
Эксперт MS Access
26815 / 14494 / 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,491
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
10747 / 5586 / 1412
Регистрация: 05.10.2016
Сообщений: 15,798
21.08.2017, 13:29 14
Цитата Сообщение от Braser Посмотреть сообщение
ЭЭххх, еще бы понимать, как FSO сюда прикрутить...
Посмотрите пример тут ...
Чутка переделать и будет то что вам нужно.
1
Эксперт MS Access
26815 / 14494 / 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,491
21.08.2017, 14:24  [ТС] 16
Спасибо за ссылку, будем изучать, да прибудет со мной сила...

Добавлено через 6 минут
выдал ошибку компиляции
ByRef argument tipe mismatch
ругается сюда
Visual Basic
1
s = s & FindSubFolder(path(i), Me.Деталь)
0
Модератор
Эксперт MS Access
12085 / 4945 / 791
Регистрация: 07.08.2010
Сообщений: 14,525
Записей в блоге: 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,491
22.08.2017, 10:47  [ТС] 18
И как подправить чтобы заработала ?
0
Модератор
Эксперт MS Access
12085 / 4945 / 791
Регистрация: 07.08.2010
Сообщений: 14,525
Записей в блоге: 4
22.08.2017, 10:52 19
все та жа правая МЫША
Миниатюры
Поиск файла в сетевой директории командой из формы  
1
393 / 137 / 37
Регистрация: 16.03.2013
Сообщений: 1,491
22.08.2017, 13:17  [ТС] 20
Лучший ответ Сообщение было отмечено mobile как решение

Решение

все загадками говорите...
1
22.08.2017, 13:17
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2017, 13:17
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru