网络读取文本的问题

realcolafish 2007-04-19 03:02:51
读取网络文件:http://192.168.1.1/filelist.txt 是没有问题的,但是如果去逐行读取文本中的内容呢?

注意:不能保存在本地后再读取.
...全文
373 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
realcolafish 2007-04-22
  • 打赏
  • 举报
回复
感谢skycoffee 和 vividw 先结贴,请skycoffee到另外的帖子领分.
realcolafish 2007-04-20
  • 打赏
  • 举报
回复
怎么没人回答吗?
realcolafish 2007-04-20
  • 打赏
  • 举报
回复
补充:是这个自动更新完整代码的给500分,部分代码的50~100分.

代码可以发给我的邮箱:kavie@live.com
realcolafish 2007-04-20
  • 打赏
  • 举报
回复
是这样的,初学DELPHI,由于工作需要想做一个自动更新的功能,网络上放的文本是文件名+MD5值,例如:"test.dat 7ece230786df0afaa1c32b73697b49ba"

本地先读取网络上的文本,逐行判断本地的MD5值和远程的MD5值,如果不同则下载更新.但是在逐行读取这块遇到了问题,希望大家能够给于帮助.

如果能给出代码的,我给500分,我用信誉保证,不信大家可以上LINUX/UNIX版,我是4个裤衩,即将升星.
shycoffee 2007-04-20
  • 打赏
  • 举报
回复
返回的是一个字符串变量,接下来处理这个字符串就可以了.
shycoffee 2007-04-20
  • 打赏
  • 举报
回复
楼上说的对头,我这里有现成的代码,用到的是Indy
function GetVersionInfo(MyURL: string): string;
var
MyIdHTTPVer: TIdHTTP;
Str: string;
begin
try
try
MyIdHTTPVer := TIdHTTP.Create(self);
Str := MyIdHTTPVer.Get(MyURL);
result := Str;
except

end;
finally
MyIdHTTPVer.Free;
end;
end;
lliihhaaoo 2007-04-20
  • 打赏
  • 举报
回复
倒是可以通过设置下载range的参数下载文件的任意部分,但问题是无法直接判断行的大小。所以最好的方法还是全部下载到stream里,然后处理stream就行了。
天涯倦客 2007-04-20
  • 打赏
  • 举报
回复
http://delphi.about.com/od/internetintranet/a/get_file_net.htm
Programmatically Download Web Documents from the Internet
Download Files, HTML pages, RSS feeds
你也可以用 其它控件indy windows api etc.


uses WinInet;

function GetInetFile (const fileURL, FileName: String): boolean;
const
BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
BufferLen: DWORD;
f: File;
sAppName: string;
begin
result := false;
sAppName := ExtractFileName(Application.ExeName) ;
hSession := InternetOpen(PChar(sAppName), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0) ;
try
hURL := InternetOpenURL(hSession, PChar(fileURL), nil, 0, 0, 0) ;
try
AssignFile(f, FileName) ;
Rewrite(f,1) ;
repeat
InternetReadFile(hURL, @Buffer, SizeOf(Buffer), BufferLen) ;
BlockWrite(f, Buffer, BufferLen)
until BufferLen = 0;
CloseFile(f) ;
result := True;
finally
InternetCloseHandle(hURL)
end
finally
InternetCloseHandle(hSession)
end
end;


----
var
internetFile,
localFileName: string;
begin
internetFile := 'http://z.about.com/6/g/delphi/b/index.xml';
localFileName := 'About Delphi Programming RSS Feed.xml';

if GetInetFile(internetFile, localFileName) then
ShowMessage('Download successful.')
else
ShowMessage('Error in file download.') ;
天涯倦客 2007-04-20
  • 打赏
  • 举报
回复
我上面发的 函数可以用。。

idny的话
var
i:Integer;
sl:TStringList;
begin
sl:=TStringList.Create;
sl.Text:=( IdHTTP1.Get('http://127.0.0.1/1.txt'));
for I := 0 to sl.Count - 1 do
ShowMessage(sl[i]);
sl.Free
end.
天涯倦客 2007-04-20
  • 打赏
  • 举报
回复
文本文件可以用 tstringlist

sl:TStringList;
begin
sl:=TStringList.Create;
sl.LoadFromFile('md5.txt');
ShowMessage(sl[0]);
sl.Free;
end;
realcolafish 2007-04-20
  • 打赏
  • 举报
回复
我的这个方法好处是是服务端不需要做任何设置,只要有WEB服务就可以了,目前的进展是:
1、已经写好了用于生成服务段读取用的MD5值列表的工具(更新的文件比较多);
2、现在读取网络文件就是用的TIdhttp控件,就差逐行读取MD5值的方法;

请大虾们指教
天涯倦客 2007-04-20
  • 打赏
  • 举报
回复

用 ftp 或者 httpserver .相当于 服务器文件名是未知的 需要设置服务器端 遍历 目录下 文件名.*
realcolafish 2007-04-19
  • 打赏
  • 举报
回复
AssignFile()不能直接和网络文件建立连接吧
chenzhuo 2007-04-19
  • 打赏
  • 举报
回复
一样的吧!
AssignFile(F,'http://192.168.1.1/filelist.txt');
Readln(F,..);

1,594

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧