Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.06.10;
Скачать: CL | DM;

Вниз

Запись в филе на сервак   Найти похожие ветки 

 
MMarat ©   (2002-03-28 12:05) [0]

Народ ! Трабл такой. Не помню где я взял эту процедуру, примерно так выглядела (до моего редактирования):

const BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
sAppName: string;
i:integer;
s:string;
begin
memo1.Clear;
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName), LOCAL_INTERNET_ACCESS, nil, nil, 0);
try
hURL := InternetOpenURL(hSession, PChar(" http://MyWeb/a.txt"), nil,0,0,0);
try
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
s:="";
for i:=1 to BufferLen do begin
s:=s+chr(Buffer[i]);
end;
memo1.Lines.Add(s);
until BufferLen = 0;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;
Ну соответственно в мемо попадает содержимое файла a.txt лежащий на нашем местном серваке. Теперь мне нада записать туда че-нить. Наваял похожую процедурку:
const BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
sAppName: string;
i:integer;
s:string;
begin
if trim(edit1.Text) <> "" then begin
sAppName := ExtractFileName(Application.ExeName);
hSession := InternetOpen(PChar(sAppName), LOCAL_INTERNET_ACCESS, nil, nil, 0);
try
hURL := InternetOpenURL(hSession, PChar(" http://MyWeb/a.txt"), nil,0,0,0);
try
s:=edit1.Text;
fillchar(Buffer, SizeOf(Buffer), 0);
for i:=1 to Length(s) do begin
Buffer[i]:=ord(s[i]);
end;
InternetWriteFile(hURL, @Buffer, SizeOf(Buffer), BufferLen);
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;
end;
Но InternetWriteFile дает ложь.
Кто знает, где грабли ? У филе a.txt - полный доступ для всех...
Есть подозрение, что во втором параметре InternetOpen нужно ставить другое значение, а какое - не знаю...
Спасиба.


 
Wonder ©   (2002-03-28 12:12) [1]

А ты хоть понимаешь, что ты пытаешься сделать?
Расскажи поподробнее.


 
MMarat ©   (2002-03-28 12:18) [2]

Ну как ? Считывание инфы из файла, который лежит на серваке. Соответственно, попытка записи тунды...


 
Kornet ©   (2002-03-28 12:26) [3]

Обычно на http серверах стоят права только на чтения, со всеми вытекающими отсюда последствиями...


 
MMarat ©   (2002-03-28 12:28) [4]

Дык я сам собственноручно в свойствах-безопасности файла дал всем полный доступ...


 
Wonder ©   (2002-03-28 12:30) [5]

>Kornet
Покажи мне хоть один "необычный" http-сервер, на который ты хоть что-нибудь сможешь таким макаром записать? Не используя протокол http и html (формы и т.п.).


 
Wonder ©   (2002-03-28 12:35) [6]

>MMarat
Ты не совсем ясно себе представляешь, как это работает.
Ф-цией InternetOpenURL ты открываешь URL, а не файл.


 
MMarat ©   (2002-03-28 12:38) [7]

Значит, не получится, да ?
А для чего тогда в дельфях функция InternetWriteFile ?


 
Wonder ©   (2002-03-28 12:43) [8]

Во-первых, не в делфях, а в WinInet API
Во-вторых, а посмотреть хелп нельзя?

В-третьих,

This function writes data to an open Internet file

hFile
[in] Valid HINTERNET handle returned from a previous call to FtpOpenFile or an HINTERNET handle sent by HttpSendRequestEx.

Где здесь хоть слово об URL?



 
Kornet ©   (2002-03-28 13:04) [9]

2Wonder:
>Покажи мне хоть один "необычный" http-сервер, на который ты
>хоть что-нибудь сможешь таким макаром записать? Не используя
>протокол http и html (формы и т.п.).
А причём тут сервер? В HTTP протоколе есть метод PUT, он позволяет загружать на веб.сервер документ, но повторю, что традиционно эта функция не реализована или отключена, реализация этого к примеру на апаче делается подключением модуля mod_put...
P.S.: Что бы не быть голословным: http://www.citforum.ru/internet/cgi_tut/rqst.shtml#PUT


 
Wonder ©   (2002-03-28 13:20) [10]

>Kornet
Ты внимательно читаешь или просто ищешь знакомые слова?
Что я написал раньше?
"...Не используя протокол http..."


 
Kornet ©   (2002-03-28 14:08) [11]

Вопрос звучал так: почему не сохраняется документ по URI http://MyWeb/a.txt. Не важно на чём ты программируешь, на Дельфи, Си, или с помощью левых компонент или вызова функций API, в любом случае при работе с веб. сервером используется сеансовый протокол HTTP. Отсюда вывод, ты сам то понял, что спросил?


 
Wonder ©   (2002-03-28 14:48) [12]

>Kornet
Началось :) Ладно-ть, раз так.

1. Не надо перевирать под себя вопросы.

2. Чтобы спорить, надо бы знать предмет спора, а именно ф-ции WinInet API. Что, зачем и как.

3. Как ты себе представляешь, что делает ф-ция InternetWriteFile?
Ты полагаешь, что она создает HTTP PUT-запрос?

4. И последнее. Если я простым сокетом прилеплюсь к порту 80 веб-сервера, по-твоему, я автоматически использую HTTP?


 
Digitman ©   (2002-03-28 15:18) [13]

>Kornet
Прежде чем упорно нести чушь и спорить с <Wonder>, абстрагируйся на минуту от своих "филе" да "серваков", да задумайся над различем hFile и прочих хэндлов, используемых в различных API-вызовах !


 
Kornet ©   (2002-03-28 15:18) [14]

Ну как говаривал один классик, в споре рождается истина. :)
1. Вопрос как был, так и остался вверху ветки.
2. А разве мы спорили о функциях WinInet API?
>Покажи мне хоть один "необычный" http-сервер, на который ты
>хоть что-нибудь сможешь таким макаром записать? Не используя
>протокол http и html (формы и т.п.).
3. Я этого не утверждал, ты сам ответил что делает эта функция: Wonder © (28.03.02 12:43)
4. Подключаясь к порту 80 веб. сервера ты используешь транспортный протокол TCP/IP, а вот что бы хоть что то получить от сервера, тебе, как бы ни хотелось, придётся использовать HTTP...
На вопрос автора я дал ответ, что не все сервера могут это делать, да и не таким способом как он... Но это, как ни парадоксально это звучит, сделать можно. Хотя другими методами, не зацикливаясь на функциях API ака WinInet API.
Мир? :-)


 
Digitman ©   (2002-03-28 15:18) [15]

>Kornet
Прежде чем упорно нести чушь и спорить с <Wonder>, абстрагируйся на минуту от своих "филе" да "серваков", да задумайся над различем hFile и прочих хэндлов, используемых в различных API-вызовах !


 
Digitman ©   (2002-03-28 15:22) [16]

>Kornet

Приношу извинение. Это адресовано автору, <MMarat>


 
MMarat ©   (2002-03-29 09:05) [17]

Звыняйте шо вмешиваюсь в ваш спор :) , но может кто знает как осуществить запись в файл, хотя бы примерно... Хелп у меня почему-то не вызывается по этим апишным функциям, а сидеть и разглядывать исходник wininet - все равно непонятно... Прошу простить, но в этой области я галимый ламер. :)


 
Wonder ©   (2002-03-29 10:53) [18]

>MMarat
Поставь задачу: в какой файл, где он находится, какими средствами записывать и т.п.



Страницы: 1 вся ветка

Текущий архив: 2002.06.10;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.017 c
14-31010
Malder
2002-05-04 13:41
2002.06.10
ДР


14-30990
MemoryLeak
2002-05-07 09:40
2002.06.10
Чужое адресное пространство.


4-31056
новенький в Делфи
2002-04-10 02:22
2002.06.10
Почему не работает?


7-31017
lexxvlad
2002-03-15 06:17
2002.06.10
Прочитать данные из com порта


1-30749
[BAD]Angel
2002-05-23 16:09
2002.06.10
Помогите с TryIcon!