MS-Access, вложенный DIR - проверьте, существует ли файл где-либо еще во время циклического перемещения по папке - PullRequest
0 голосов
/ 30 апреля 2010

Я использовал команду DIR () в Microsoft Access 2003 для циклического просмотра файлов в папке A. Это работает нормально, но мне нужно проверить, существует ли каждый файл в другом месте (папка B), и обработать только файл, если он не существует в папке B.

Проблема заключается в том, что при проверке файла, существующего в папке B, также используется функция DIR (), которая затем сбрасывает или сбивает с толку исходную, в результате чего в папке A. дальнейшие файлы не обнаруживаются.

Есть ли способ проверить, существует ли файл без использования DIR?

Или есть способ создать отдельный экземпляр DIR?

Полагаю, я мог бы составить список файлов в папке A в массив, а затем обработать записи в массиве, но это выглядит довольно "неуклюже"

Есть предложения по лучшему решению?

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 мая 2010

Я предпочитаю файловые API, поскольку я не совсем доверяю FSO. См. Также FindFirstFile: Сравнение производительности - FSO и API При менее чем сотне файлов разница в производительности не столь существенна. Много примеров кода, который будет полезен для простого списка файлов или рекурсивно через подпапки в File API Routines

0 голосов
/ 30 апреля 2010

В зависимости от вашей операционной системы (систем) и требований, поиск SystemIndex может оказаться полезным Вот некоторые заметки.

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim strSQL As String

''This is the Windows Search connection string to use
cn.Open "Provider=Search.CollatorDSO;" _
    & "Extended Properties='Application=Windows';"

''SQL SELECT  statement specifies what properties to return,
''            you can add more if you want
''    FROM -  use SystemIndex for a local query or
''            MACHINENAME.SystemIndex for remote
''    WHERE - specify restrictions including SCOPE and other
''            conditions that must be true

''To add scope restriction:
''strSQL = "SELECT System.ItemName, System.ItemTypeText, " _
''       & "System.Size FROM SystemIndex " _
''       & "WHERE Scope='file:c:\Users\'"

strSQL = "SELECT System.ItemName, System.ItemTypeText, " _
       & "System.Size, System.ItemFolderPathDisplay " _
       & "FROM SystemIndex " _
       & "WHERE System.ItemName='AnExampleFile.mdb'"

rs.Open strSQL, cn
rs.MoveFirst

Do Until rs.EOF
    Debug.Print rs.Fields.Item("System.ItemName")
    Debug.Print rs.Fields.Item("System.ItemTypeText")
    Debug.Print rs.Fields.Item("System.Size")
    Debug.Print rs.Fields.Item("System.ItemFolderPathDisplay")
    Debug.Print String(30, "-")
    rs.MoveNext
Loop

rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

Дополнительная информация:
http://msdn.microsoft.com/en-us/library/bb266517(VS.85).aspx
http://msdn.microsoft.com/en-us/library/bb419046(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/bb776859(v=VS.85).aspx
http://msdn.microsoft.com/en-us/library/bb231297(v=VS.85).aspx

...