Delphi 如何比较本地文件和web上文件的大小?

Delphi 如何比较本地文件和web上文件的大小?,delphi,delphi-7,delphi-xe,Delphi,Delphi 7,Delphi Xe,可能重复: 假设我有一个本地文件: C:\file.txt 和网络上的一个: 我如何检查尺寸是否不同,如果它们不同,那么//做些什么 谢谢。您可以对文件发出HTTP头请求并检查内容长度头。要获取Internet上文件的大小,请执行以下操作 function WebFileSize(const UserAgent, URL: string): cardinal; var hInet, hURL: HINTERNET; len: cardinal; index: cardinal;

可能重复:

假设我有一个本地文件:

C:\file.txt

和网络上的一个:

我如何检查尺寸是否不同,如果它们不同,那么//做些什么


谢谢。

您可以对文件发出HTTP头请求并检查内容长度头。

要获取Internet上文件的大小,请执行以下操作

function WebFileSize(const UserAgent, URL: string): cardinal;
var
  hInet, hURL: HINTERNET;
  len: cardinal;
  index: cardinal;
begin
  result := cardinal(-1);
  hInet := InternetOpen(PChar(UserAgent),
    INTERNET_OPEN_TYPE_PRECONFIG,
    nil,
    nil,
    0);
  index := 0;
  if hInet <> nil then
    try
      hURL := InternetOpenUrl(hInet, PChar(URL), nil, 0, 0, 0);
      if hURL <> nil then
        try
          len := sizeof(result);
          if not HttpQueryInfo(hURL,
            HTTP_QUERY_CONTENT_LENGTH or HTTP_QUERY_FLAG_NUMBER,
            @result,
            len,
            index) then
            RaiseLastOSError;
        finally
          InternetCloseHandle(hURL);
        end;
    finally
      InternetCloseHandle(hInet)
    end;
end;
要获得本地文件的大小,最简单的方法是
FindFirstFile
并读取
TSearchRec
。不过,稍微优雅一点的是

function GetFileSize(const FileName: string): cardinal;
var
  f: HFILE;
begin
  result := cardinal(-1);    
  f := CreateFile(PChar(FileName),
    GENERIC_READ,
    0,
    nil,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    0);
  if f <> 0 then
    try
      result := Windows.GetFileSize(f, nil);
    finally
      CloseHandle(f);
    end;
end;

注意:如果在您的情况下,仅使用32位表示文件大小是不够的,您需要对上述两个函数进行一些小的更改。

检查此问题,谢谢您,这正是我所需要的。+1有关使用“标准”windows internet Calls的详细过程,谢谢分享。我本想问一个类似的问题,但搜索结果却提出了这个问题。干得好:)
function GetFileSize(const FileName: string): cardinal;
var
  f: HFILE;
begin
  result := cardinal(-1);    
  f := CreateFile(PChar(FileName),
    GENERIC_READ,
    0,
    nil,
    OPEN_EXISTING,
    FILE_ATTRIBUTE_NORMAL,
    0);
  if f <> 0 then
    try
      result := Windows.GetFileSize(f, nil);
    finally
      CloseHandle(f);
    end;
end;
if GetFileSize('C:\Users\Andreas Rejbrand\Desktop\test.txt') =
           WebFileSize('UA', 'http://privat.rejbrand.se/test.txt') then
  ShowMessage('The two files have the same size.')
else
  ShowMessage('The two files are not of the same size.')