读取网络文件:http://192.168.1.1/filelist.txt 是没有问题的,但是如果去逐行读取文本中的内容呢?注意:不能保存在本地后再读取.

解决方案 »

  1.   

    一样的吧!
    AssignFile(F,'http://192.168.1.1/filelist.txt');
    Readln(F,..);
      

  2.   

    AssignFile()不能直接和网络文件建立连接吧
      

  3.   

    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.') ;
      

  4.   

    倒是可以通过设置下载range的参数下载文件的任意部分,但问题是无法直接判断行的大小。所以最好的方法还是全部下载到stream里,然后处理stream就行了。
      

  5.   

    楼上说的对头,我这里有现成的代码,用到的是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;
      

  6.   

    是这样的,初学DELPHI,由于工作需要想做一个自动更新的功能,网络上放的文本是文件名+MD5值,例如:"test.dat 7ece230786df0afaa1c32b73697b49ba"本地先读取网络上的文本,逐行判断本地的MD5值和远程的MD5值,如果不同则下载更新.但是在逐行读取这块遇到了问题,希望大家能够给于帮助.如果能给出代码的,我给500分,我用信誉保证,不信大家可以上LINUX/UNIX版,我是4个裤衩,即将升星.
      

  7.   


    用 ftp 或者 httpserver  .相当于 服务器文件名是未知的 需要设置服务器端 遍历 目录下 文件名.*
      

  8.   

    我的这个方法好处是是服务端不需要做任何设置,只要有WEB服务就可以了,目前的进展是:
    1、已经写好了用于生成服务段读取用的MD5值列表的工具(更新的文件比较多);
    2、现在读取网络文件就是用的TIdhttp控件,就差逐行读取MD5值的方法;请大虾们指教
      

  9.   

    文本文件可以用 tstringlist  sl:TStringList;
    begin
      sl:=TStringList.Create;
      sl.LoadFromFile('md5.txt');
      ShowMessage(sl[0]);
      sl.Free;
    end;
      

  10.   

    我上面发的 函数可以用。。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.
      

  11.   

    感谢skycoffee 和 vividw 先结贴,请skycoffee到另外的帖子领分.