InternetReadFile获取的数据用指针存储
本帖最后由 l0v3_y1n9 于 2012-03-11 19:22:54 编辑 我想请问用InternetReadFile循环获取URL上文件的内容.
用一个指针类型存储,由于我并不知道URL上面的文件多大,无法分配完整大小的内存.
只能通过循环获取的方式,假设每次获取1024字节,那么获取后的数据如何附加在原来指针的尾端?
var
hSession, hRequest: HINTERNET;
dwBytesRead: DWORD;
szBuffer: Array[0..1024] of Char;
lpData: Pointer;
szFileURL: string;
dwFileSize: DWORD;
begin
szFileURL := 'http://127.0.0.1/1.txt';
dwFileSize := 0;
hSession := InternetOpen('', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
try
if Assigned(hSession) then
begin
hRequest := InternetOpenUrlA(hSession, PAnsiChar(szFileURL), nil, 0, INTERNET_FLAG_RELOAD, 0);
FillChar(szBuffer, SizeOf(szBuffer), #0);
if Assigned(hRequest) then
begin
try
while True do
begin
dwBytesRead := 1024;
if InternetReadFile(hRequest, @szBuffer, 1024, dwBytesRead) then
begin
if dwBytesRead = 0 then Break;
dwFileSize := dwFileSize + dwBytesRead;
//这里应该如何附加指针的数据?
end
else Break;
end;
finally
InternetCloseHandle(hRequest);
end;
end;
end;
finally
InternetCloseHandle(hSession);
end;
end;
[解决办法]
#0这个问题确实很难搞,我上次在网上找了好久,也没找到具体的方法实现去掉#0,最终只能是防止字符串中出现#0了。
[解决办法]
CopyMemory,Move都可以