поиск файла
-
- Участник
- Сообщения: 66
- Зарегистрирован: 03 авг 2010, 04:24
- Репутация: 0
поиск файла
Я знаю само название файла, а путь к нему не знаю. Как программно найти все файлы с таким именем и расширением, чтобы можно было с ними работать? Например, для функции FileExists() нужен полный путь, а я его не знаю.
Подскажите, пожалуйста.
Подскажите, пожалуйста.
-
- Активный участник
- Сообщения: 185
- Зарегистрирован: 26 июл 2010, 08:54
- Репутация: 30
- Откуда: Ногинск
Re: поиск файла
1. На каком языке (на С++ кусок более-менее подходящего текста могу прислать)?
2. Где искать (есть по крайне мере конкретная папка или хотя бы диск)?
В общем случае - перебрать все файлы на диске, отделить от полного пути имя файла и сравнить с исходным.
2. Где искать (есть по крайне мере конкретная папка или хотя бы диск)?
В общем случае - перебрать все файлы на диске, отделить от полного пути имя файла и сравнить с исходным.
-
- Участник
- Сообщения: 66
- Зарегистрирован: 03 авг 2010, 04:24
- Репутация: 0
Re: поиск файла
Хотелось бы на MapBasic.
Желательно на всех дисках, но хотя бы на С:
А как это организовать на MapBasic?
Желательно на всех дисках, но хотя бы на С:
А как это организовать на MapBasic?
-
- Гуру
- Сообщения: 2627
- Зарегистрирован: 29 мар 2007, 14:12
- Репутация: 34
- Откуда: Ukraine
Re: поиск файла
Смотрите в сторону рекурсивного обхода каталогов. Я хз есть ли в MapBasic возможность работы с файловой системой или нет, но вот вам код на обычном бейсике. Похожих примеров в гугле навалом.
-
- Активный участник
- Сообщения: 120
- Зарегистрирован: 14 апр 2011, 13:24
- Репутация: 5
- Откуда: Екатеринбург
Re: поиск файла
ну, в общем случае, достаточно перебирать не файлы, а папки, проверяя (тем же fileexists()) наличие нужного файла в каждой.Алекс писал(а): В общем случае - перебрать все файлы на диске, отделить от полного пути имя файла и сравнить с исходным.
можно так:
создаем функцию для формирования списка подпапок:
Код: Выделить всё
Define INVALID_HANDLE_VALUE -1
Define MAX_PATH 260
Type FILETIME
dwLowDateTime As Integer
dwHighDateTime As Integer
End Type
Type WIN32_FIND_DATA
dwFileAttributes As Integer
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Integer
nFileSizeLow As Integer
dwReserved0 As Integer
dwReserved1 As Integer
cFileName As String*MAX_PATH
cAlternateFileName As String*14
End Type
Function GetListFolders(ByVal dir As String, ByVal mask As String,
FileArray() As String) As Integer
Dim count As Integer
Dim fstruct As WIN32_FIND_DATA
Dim res As Integer
Dim dw, fhandle As Integer
Dim fn As String
GetListFolders = 0
If dir = "" Then
Exit Function
End If
If Not FileExists(Left$(dir, Len(dir) - 1)) Then
Exit Function
End If
fstruct.dwFileAttributes = &H00000010
fhandle = FindFirstFile(dir + mask, fstruct)
If fhandle = INVALID_HANDLE_VALUE Then
Exit Function
End If
fn = LTrim$(RTrim$(fstruct.cFileName))
dw = GetFileAttributes(dir + fstruct.cFileName)
If (dw\&H00000010) mod &H00000010 = 1 And fn <> "." And fn <> ".." Then
Redim FileArray(1)
FileArray(1) = fn
count = 1
End If
While FindNextFile(fhandle, fstruct)
fn = LTrim$(RTrim$(fstruct.cFileName))
dw = GetFileAttributes(dir + fn)
If (dw\&H00000010) mod &H00000010 = 1 And fn <> "." And fn <> ".." Then
count = count + 1
Redim FileArray(count)
FileArray(count) = fn
End If
Wend
res = FindClose(fhandle)
GetListFolders = count
End Function
Код: Выделить всё
dim flist() as string
dim fcount as integer
sub ffind(byval adir as string, byval fname as string)
dim dlist() as string
dim i, c as integer
if fileexists(adir+fname) then
fcount = fcount +1
redim flist(fcount)
flist(fcount) = adir + fname
end if
c = GetListFolders(adir, "*.*", dlist)
for i = 1 to c
call ffind(adir + dlist(i) + "\", fname)
next
end sub
извиняюсь за рекурсию (так короче получается)

Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя