我想实现的功能是读取文件1.exe,然后把读取出来的1.exe的数据追加到2.exe的尾部,
为什么我用下面代码实现不了?请问该怎么解决?(不用流操作的,用API函数)var
vFileHandle0, vFileHandle1: THandle;
vfilesize: LongWord;
vdata0: Pointer;
vTempWord: LongWord;
begin
vFileHandle0 := CreateFile(PAnsiChar('1.exe'), GENERIC_READ,
FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
vFileSize := GetFileSize(vFileHandle0, nil);
GetMem(vdata0, vFileSize);
SetFilePointer(vFileHandle0, 0, nil, FILE_BEGIN);
ReadFile(vFileHandle0, vData0, vFileSize, vTempWord, nil);
CloseHandle(vFileHandle0); vFileHandle1 := CreateFile(PAnsiChar('2.exe'), GENERIC_WRITE,
FILE_SHARE_WRITE, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
SetFilePointer(vFileHandle1, 0, nil, FILE_END);
WriteFile(vFileHandle1, vdata0^, SizeOf(vdata0), vTempWord, nil);
CloseHandle(vFileHandle1);
FreeMem(vdata0) ;
end;
;
为什么我用下面代码实现不了?请问该怎么解决?(不用流操作的,用API函数)var
vFileHandle0, vFileHandle1: THandle;
vfilesize: LongWord;
vdata0: Pointer;
vTempWord: LongWord;
begin
vFileHandle0 := CreateFile(PAnsiChar('1.exe'), GENERIC_READ,
FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0);
vFileSize := GetFileSize(vFileHandle0, nil);
GetMem(vdata0, vFileSize);
SetFilePointer(vFileHandle0, 0, nil, FILE_BEGIN);
ReadFile(vFileHandle0, vData0, vFileSize, vTempWord, nil);
CloseHandle(vFileHandle0); vFileHandle1 := CreateFile(PAnsiChar('2.exe'), GENERIC_WRITE,
FILE_SHARE_WRITE, nil, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
SetFilePointer(vFileHandle1, 0, nil, FILE_END);
WriteFile(vFileHandle1, vdata0^, SizeOf(vdata0), vTempWord, nil);
CloseHandle(vFileHandle1);
FreeMem(vdata0) ;
end;
;
WriteFile(vFileHandle1, vdata0^, SizeOf(vdata0), vTempWord, nil);
看出两个问题:
1) vdata0^ --> 多了^
2) SizeOf(vdata0) = 4换成下面的看看
WriteFile(vFileHandle1, vdata0, vfilesize, vTempWord, nil);