Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Alex
Зарегистрирован: 31.10.2008 Сообщения: 80
|
Добавлено: Сб Окт 22, 2016 8:27 am Заголовок сообщения: Когда имя файла всегда разное... |
|
|
Приветствую, уважаемая аудитория.
Встретился с задачей, когда известно где хранится файл (путь к файлу постоянный), но всякий раз имя файла разное. Неизменно только расширение файла "*.xls", например.
Существует ли в природе способ как открывать такие файлы с неизвестным именем в MB?
Спасибо. |
|
Вернуться к началу |
|
|
thegeo
Зарегистрирован: 17.01.2012 Сообщения: 119
|
Добавлено: Сб Окт 22, 2016 12:38 pm Заголовок сообщения: |
|
|
Непонятно. А если по этому пути 10 файлов с расширением xls? Нужно сформулировать критерий выбора конкретного файла (или нужно все 10 последовательно открывать?). |
|
Вернуться к началу |
|
|
Alex
Зарегистрирован: 31.10.2008 Сообщения: 80
|
Добавлено: Сб Окт 22, 2016 3:25 pm Заголовок сообщения: |
|
|
Каждый xls-файл нужно открыть, забрать информацию из xls-файла в TAB-файл, а сам xls-файл будет перемещен, например, в архив. Таким образом, в папке всегда будут находиться xls-файлы, которые еще никогда не были открыты, но каждый из которых следует открыть.
Вопрос как, если имя файла всегда разное. |
|
Вернуться к началу |
|
|
thegeo
Зарегистрирован: 17.01.2012 Сообщения: 119
|
Добавлено: Сб Окт 22, 2016 7:52 pm Заголовок сообщения: |
|
|
Для получения списка файлов используйте функции Win32 API (FindFirstFile, FindNextFile, FindClose). Также возможно использование библиотек NET. |
|
Вернуться к началу |
|
|
Alex
Зарегистрирован: 31.10.2008 Сообщения: 80
|
Добавлено: Ср Окт 26, 2016 8:37 pm Заголовок сообщения: |
|
|
Приветствую. Большое спасибо за совет. Нашел такой выход. Всякий раз, когда формируется xls-файл, его название заносится в Таблицу с постоянным именем и известным размещением на диске. После беру каждую строку из этой таблицы и открываю файл, где имя файла соответствует записи в строке таблицы. |
|
Вернуться к началу |
|
|
thegeo
Зарегистрирован: 17.01.2012 Сообщения: 119
|
Добавлено: Ср Окт 26, 2016 11:35 pm Заголовок сообщения: |
|
|
Вообщем то несложно получить список файлов удовлетворяющих некоторому шаблону в конкретной папке. Вот пример реализации того о чем говорил выше.
Include "mapbasic.def"
Type _WIN32_FIND_DATA
dwFileAttributes as integer 'Атрибуты файла DWORD
ftCreationTime as float 'Время создания FILETIME
ftLastAccessTime as float 'Время последнего доступа
ftLastWriteTime as float 'Время последней записи в файл
nFileSizeHigh as integer 'Верхний байт размера файла DWORD
nFileSizeLow as integer 'Нижний байт размера файла
dwReserved0 as integer 'Зарезервировано
dwReserved1 as integer 'Зарезервировано
cFileName as string*250 'Имя файла TCHAR[]
cAlternateFileName as string*250 'Имя файла для отображения в DOS (8:3)
End Type
Declare Sub Main
Declare sub getFilesNames(byval pth as string,files() as string,jj as integer)
Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As _WIN32_FIND_DATA) As integer
Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As integer, lpFindFileData As _WIN32_FIND_DATA) As integer
Declare Function FindClose Lib "kernel32" (ByVal hFindFile As integer) As integer
sub Main
dim nmFiles() as string
dim pth as string
dim k,i as integer
pth="c:\03\*.xls"
call getFilesNames(pth,nmFiles,k)
For i = 1 To k
print nmFiles(i)
Next
End Sub
sub getFilesNames(byval pth as string,files() as string,jj as integer)
dim fName as string
dim hFind,ii as integer
dim findData as _WIN32_FIND_DATA
ii=0
hFind = FindFirstFile(pth, findData)
If hFind <> -1 Then
redim files(100)
do
ii=ii+1
fName =findData.cFileName
files(ii)=fName
loop While FindNextFile(hFind, findData) <> 0
jj=ii
ii=FindClose(hFind)
redim files(jj)
End If
End Sub
В данном случае из папки c:\03 будут выбраны все имена файлов xls (и xlsx). |
|
Вернуться к началу |
|
|
Alex
Зарегистрирован: 31.10.2008 Сообщения: 80
|
Добавлено: Чт Окт 27, 2016 5:42 pm Заголовок сообщения: |
|
|
Большое спасибо за пример |
|
Вернуться к началу |
|
|
|