C/S模式,如何获取远程客户端的文件及图标到本地,类似资源管理器,管理远程主机,谢谢各位了。
用什么控件或者什么函数等等,方法是什么。
有朋友告诉我用TStringlist获取,但是无法获取远程图标,请各位帮帮忙。来者有分。

解决方案 »

  1.   

    远程图标?文件还是app的图标?
      

  2.   

    文件及文件夹的图标
    比如远程c:\下的所有文件
    文件夹还是文件夹显示
    程序用程序图标显示
    文本用文本的图标显示
    rar用rar的图标显示
    文件和图标一并读取到本地就好象一个本地的资源管理器
    管理的确实远程机器的文件
      

  3.   

    就是xxmmmx 的想法
    取本地应有的图标对应远程主机文件的图标
    但是这是如何实现呢?
    包括获取远程文件夹列表
      

  4.   

    顺便请教一下samples里面的shelllistview是否能用到远程主机上用来获取远程主机文件列表呢?
    最重要的是如何获取远程主机列表
    获取到的列表如何与本地图标关联起来
    我谢谢各位了
      

  5.   

    我知道你写的CS程序,难道你在服务器上把一个文件夹共享都不行(不会)吗?
    比方说你的服务器的挨劈为:192.168.1.110,你共享了一个文件夹ShareFiles
    那你在程序中就可以象访问本机文件夹一样访问"\\192.168.1.110\ShareFiles\",下面是列出某个目录下文件的代码:
    //Dir为要遍历的路径,Files用来盛放Dir下的文件名,bRecursive用来表示是否变量子文件夹
    procedure LoadDirFiles(Dir: string; Files: TStrings; bRecursive: Boolean);  procedure DoLoad(Dir: string; Files: TStrings);
      var
        F: TSearchRec;
        hFind: Integer;
      begin
        if (Dir <> '') and (Dir[Length(Dir)] <> '\') then
          Dir := Dir + '\';
        hFind := FindFirst(Dir + '*.*', faAnyFile, F);
        while hFind = 0 do
        begin
          if (F.Name <> '.') and (F.Name <> '..') then
          begin
            if F.Attr and faDirectory <> faDirectory then
              Files.Add(Dir + F.Name)
            else if bRecursive then
              DoLoad(Dir + F.Name, Files);
          end;
          hFind := FindNext(F);
        end;
        FindClose(F);
      end;begin
      Files.BeginUpdate;
      try
        Files.Clear;
        DoLoad(Dir, Files);
      finally
        Files.EndUpdate;
      end;
    end;//eg:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      LoadDirFiles(ExtractFilePath(Application.ExeName), Memo1.Lines, False);
    end;
      

  6.   


    //eg:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      LoadDirFiles('\\192.168.1.110\ShareFiles\', Memo1.Lines, False);
    end;
      

  7.   


    我使用的就是blazingfire的方法,列举某个文件夹下的所有文件名。可是问题是第一、不能共享服务器上的文件。第二、获取不到文件的图标。
    xxmmmx 的想法很好,使用本地的图标来关联。
    在我实际操作中有一个问题,我用的是TSTRINGLIST,当他遇到中间有空格的文件名后,会自动分开,比如我获取到的文件名字符串为'aaa,bbb,ccc.txt,ddd.exe,323 (2) 22.rar,111.txt'这里他会将'323' '(2)' '22.rar'进行分开,请问一下如何不让他们分开?我自定义了Delimiter属性与QuoteChar,还是不能将他们合并在一起,请问有什么方法吗?
    在一个就是如何取得本地图标将类型文件关联起来?
      

  8.   

    取网络中文件的图标那是不可能的了,你只能取到你网上那个文件类型在你本机上的相应图标,如:你网络上的那个文件是aa.jpg.那你就在你本机在建个XX.JPG然后去读出这个XX.JPG的图标来显示了。
      

  9.   


    ppdjl 能说的详细点吗?如何读本机的图标?还有一个问题就是TSTRINGLIST 分割字符串,遇到有空格的会自动分割,我不想让他分割,该怎么做?
    比如我获取到的文件名字符串为'aaa,bbb,ccc.txt,ddd.exe,323 (2) 22.rar,111.txt'这里他会将'323' '(2)' '22.rar'进行分开,请问一下如何不让他们分开?
      

  10.   

    分割字符串用ExtractStrings()就可以了
      

  11.   

    你可以下载Indy组件,当中的Demo有个管理图片的,你参考一下。
      

  12.   

    这个比较简单
    var
      FileInfo: TSHFileInfo;
      ico: TIcon;
    begin
      SHGetFileInfo('E:\TestCode\HookTest.rar', 0, FileInfo, SizeOf(FileInfo),
        SHGFI_SMALLICON + SHGFI_ICON);
      ico := TIcon.Create;
      try
        ico.Handle := FileInfo.hIcon;
        Image1.Picture.Icon := ico;
      finally
        Ico.Free;
      end;
    end;
      

  13.   

    好了,差不多了,结贴。特别感谢blazingfire的热情帮助来者都有分,谢谢各位