www.map-info.ru :: Просмотр темы - Когда имя файла всегда разное...
                               РќР° главную страницу сайта

 
                                
ВходВход    РегистрацияРегистрация    ПрофильПрофиль    ПользователиПользователи    ГруппыГруппы    FAQFAQ    ПоискПоиск  

 
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Предыдущая тема :: Следующая тема  
Автор Сообщение
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 последовательно открывать?).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
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).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Alex



Зарегистрирован: 31.10.2008
Сообщения: 80

СообщениеДобавлено: Чт Окт 27, 2016 5:42 pm    Заголовок сообщения: Добавить ответ со ссылкой на данный текст

Большое спасибо за пример
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
   Список форумов www.map-info.ru | Форум - программирование в среде MapInfo Добавить ответ
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Top.Mail.Ru