Страница 1 из 3
Invalid FileName (45)
Добавлено: 29 Август 2011, 13:27
Алексей- Софт-Центр
Добрый день!
Кларион 6, АВС.
1. Стартую блокнот. Открываю файл :
http://www.ya.ru
Все нормально открывается.
2. В словаре объявляю DOS (Binary) файл c именем !FN
3. Bо вставке "до открытия файлов" :
FN='
http://www.ya.ru'
Стартую программу - выдает ошибку:
File
http://www.ya.ru could not be opened. Error: Invalid file name (45). ...
В чем "засада"?
Алексей
Re: Invalid FileName (45)
Добавлено: 29 Август 2011, 22:36
Stalker
Привет!
для загрузки файлов http://*.html применяю шаблон File Explore (fe.tpl) можно скачать в привате, все грузится без проблем
Re: Invalid FileName (45)
Добавлено: 30 Август 2011, 12:20
Алексей- Софт-Центр
Добрый день!
Stalker!
Спасибо за совет, но не нашел этот темплатейт на фтп!
Если можно , имя папки на фтп, или киньте в мыло
info@soft-center.ru
Алексей
Re: Invalid FileName (45)
Добавлено: 30 Август 2011, 15:28
Алексей- Софт-Центр
Добрый день!
File Explorer - это немножко (или множко) не то, что надо!
Задача состоит в том, чтобы прочитать файл, находящийся на страничке сайта, типа :
http://www.yandex.ru/index.html
как обычный бинарный файл (DOS (bin))
Алексей
Re: Invalid FileName (45)
Добавлено: 30 Август 2011, 15:41
Дед Пахом
Для начала его нужно скачать.
Re: Invalid FileName (45)
Добавлено: 30 Август 2011, 17:31
Алексей- Софт-Центр
Добрый день!
Скачать: чем?
(все это должно происходить в рамках программы)
Алексей
Re: Invalid FileName (45)
Добавлено: 30 Август 2011, 17:49
Дед Пахом
Из первого попавшегося:
http://www.clarionlife.net/ далее Файлы >> Internet, выбирайте что больше нравится.
Re: Invalid FileName (45)
Добавлено: 31 Август 2011, 12:04
Алексей- Софт-Центр
Добрый день!
Дед Пахом: спасибо за советы ( и за те , которые впереди по этой теме - это чтобы не забыть потом сказать "спасибо"
)
Или я чего-то не понимаю, или я чего-то не так прошу! (В любом случае виноват я
)
Все предложенные варианты типа этого:
Для того, чтобы открыть страницу выполняется команда:
?OLE{'Navigate("file://' & CLIP(inFileName) & '")'}
Основой любого html-документа являются ссылки. И основная задача состоит в том, чтобы перехватить нажатие на ссылке в html-документе и выполнить свое действие.
НО МНЕ ЭТОГО НЕ НАДО!!!!!
У меня другая ОСНОВНАЯ задача!
Что мне надо:
1. ( и единственное) Прочитать страницу сайта средствами клариона , используя обычный драйвер DOS (Binary).
И здесь у меня ОСНОВНАЯ проблема в том, что я не могу (не знаю, не умею) правильно указать имя файла (Index), чтобы кларион понял, что это страница в глобальной сети. Пробовал и:
FN='
http://www.yandex.ru/index.html' и
FN='\\77.88.21.3\index.html' и
FN='file://
www.yandex.ru/index.html' и
много других вариантов. В том числе просто давать команду copy (xcopy) для предварительного копирования в текстовый файл.
Везде выдает ошибку типа : неправильное имя файла!
Что мне не надо:
1. Открывать на экране страницу HTML
2. Разбирать HTML код
3. Открывать диалоговые окна для выбора нужной страницы
и т.д. и т.п.
Или это в принципе не возможно?
Алексей
Re: Invalid FileName (45)
Добавлено: 31 Август 2011, 14:11
kreator
А попробуй в словаре явно указать полный путь и из словаря же посмотреть эту таблицу.
А ещё сдается мне, что нет файла
http://www.yandex.ru/index.html. Страница рисуется в динамике. Можно взять какой-нибудь сайт, где явно лежит index.html и попробовать на нем.
Re: Invalid FileName (45)
Добавлено: 31 Август 2011, 16:46
Губин Игорь
Алексей- Софт-Центр писал(а):И здесь у меня ОСНОВНАЯ проблема в том, что я не могу (не знаю, не умею) правильно указать имя файла (Index), чтобы кларион понял, что это страница в глобальной сети.
Если ты уверен, что файл именно в интернете, то действуешь неправильно.
Т.е. надо изменить логику.
1. Скачиваешь файл из интернета на диск или в память
2. Организуешь его разбор или делаешь с ним всё, что хочется.
Глобальные переменные
Код: Выделить всё
HANDLE EQUATE(UNSIGNED)
INTERNET_OPEN_TYPE_DIRECT EQUATE(1)
INTERNET_OPEN_TYPE_PRECONFIG EQUATE(0)
INTERNET_OPEN_TYPE_PROXY EQUATE(3)
DWORD EQUATE(ULONG)
HINTERNET EQUATE(HANDLE)
Определения функций
Код: Выделить всё
Module('API')
InternetAttemptConnect(DWORD),DWORD,PASCAL
InternetCloseHandle(HINTERNET), BOOL, PASCAL, PROC
InternetOpen(*CSTRING,DWORD,<*CSTRING>,<*CSTRING>,DWORD),HINTERNET, RAW, PASCAL, NAME('InternetOpenA')
InternetOpenURL(HINTERNET, *CSTRING Url, <*CSTRING Headers>, DWORD, DWORD, DWORD), HINTERNET, RAW, PASCAL, PROC, NAME('InternetOpenUrlA')
InternetReadFile(HINTERNET, *?, DWORD, *DWORD),BOOL, RAW, PASCAL, PROC
End
Локальные переменные
Код: Выделить всё
hSession HINTERNET
hUrl HINTERNET
MyUrl CSTRING(255) ! имя файла для скачивания
BufferSize EQUATE(1024) ! Размер буфера для скачивания
Buffer Group ! Буффер для скачивания
BYTE,DIM(BufferSize)
End
BufferLength DWORD
BufferString STRING(Buffersize),Over(Buffer) ! Строка для удобства работы с буффером. Именно в неё BufferString [ 1 : BufferLength ] и попадает то, что ты скачал
Agent CSTRING('My Downloader') ! Название агента для сервера (т.е. вместо IE, Opera, Chrome, Mozilla...)
Пример кода
Код: Выделить всё
MyURL = Clip('http://...') ! имя файла
hSession = InternetOpen(Agent,INTERNET_OPEN_TYPE_PRECONFIG,,,0);
if hSession ! Связь установлена, сессия открыта
hUrl = InternetOpenUrl(hSession, myUrl,,0,0,0)
If hUrl ! Файл обнаружен и готов к чтению
Loop
Buffer = All('<0>')
InternetReadFile(hUrl, Buffer, Buffersize, BufferLength)
if BufferLength <> 0 Then ! Скачан очередной буфер в Buffer длиной BufferLength
! Тут ты делаешь с этим Buffer/BufferString всё, что сочтёшь нужным( пишешь в файл, присваиваешь строке...)
end
until BufferLength = 0
InternetCloseHandle(hUrl)
End
End
Re: Invalid FileName (45)
Добавлено: 31 Август 2011, 16:52
Губин Игорь
kreator писал(а):А попробуй в словаре явно указать полный путь и из словаря же посмотреть эту таблицу.
А ещё сдается мне, что нет файла
http://www.yandex.ru/index.html. Страница рисуется в динамике. Можно взять какой-нибудь сайт, где явно лежит index.html и попробовать на нем.
На самом деле глубоко фиолетово (т.е. без разницы), генерируется страница динамически или статически, т.к. это дело сервера, и клиенту подсовывается уже готовый результат работы.
Re: Invalid FileName (45)
Добавлено: 31 Август 2011, 18:10
Игорь Столяров
Губин Игорь писал(а):
Если ты уверен, что файл именно в интернете, то действуешь неправильно.
Т.е. надо изменить логику.
1. Скачиваешь файл из интернета на диск или в память
2. Организуешь его разбор или делаешь с ним всё, что хочется.
Полностью согласен с выше написанным. Получить доступ к некоторому файлу на локальном диске и по протоколу HTTP (или FTP) - это не одно и тоже.
Нужно грузить файл по протоколу на диск (например в TEMP) или в область памяти, и потом уже как-то получать доступ к его содержимому (text, binary, zip и т.д.)
Описанный ниже способ загрузки файла (страницы) по HTTP - рабочий, но есть проблемы работы через PROXY.
Если не хочешь сильно напрягаться - можно воспользоваться библиотекой Catalyst Socket Tools (есть в FTP разделе форума), там
все делается одной командой:
LocalFile_ = Clip(LongPath(System{Prop:TempPath})) & 'yandex.html'
URL_ = '
http://www.yandex.ru/index.html'
If HttpDownloadFile(LocalFile_,URL_,HTTP_TIMEOUT,HTTP_OPTION_NOCACHE) <> False
! Открываем LocalFile_ на диске как угодно ...
end
P/S: код писал на память - могут быть орфографические АшиПки - лучше проверить по справке CST ...
Re: Invalid FileName (45)
Добавлено: 31 Август 2011, 19:13
Губин Игорь
По поводу прокси - что есть, то есть. Но тут уж (как меня в своё время просвещали) вручную настроиться на все виды прокси не проще, чем отловить все глюки в виндоус
Каталист, наверное, более "умный" в этом смысле.
Re: Invalid FileName (45)
Добавлено: 31 Август 2011, 21:23
Дед Пахом
Предвижу вопрос "А как же Блокнот, он же умеет?" Ну и? Блокнот умеет, а Калькулятор не умеет, и что?
Re: Invalid FileName (45)
Добавлено: 31 Август 2011, 21:23
Игорь Столяров
Губин Игорь писал(а):Каталист, наверное, более "умный" в этом смысле.
Да, причем решение великолепное по свое простоте. Он использует текущие настройки прокси Windows для MS Explorer ...