读取文件功能正常运行,但写入完全无效。请帮助我解决此问题。甚至我也找不到确切的问题。
INCLUDE Irvine32.inc
.data
filename byte "Input.txt",0
filelist byte 6000 dup(?),0
filelength dword ?
filehandle dword ?
.code
main PROC
call ReadFileInput
MOV ECX,1000
MOV EDX,offset filelist
CALL WRITESTRING
call WriteFileOutput
; call dumpregs
exit
main ENDP
ReadFileInput proc
mov edx,offset filename
call OpenInputFile
mov ecx,10000
mov filehandle, eax
mov edx,offset filelist
call ReadFromFile
mov filelength,eax
RET
ReadFileInput ENDP
WriteFileOutput PROC
mov edx,offset filename
mov eax,filehandle
mov edx,offset filelist
mov ecx, 10000
call WriteToFile
call closefile
Ret
WriteFileOutput ENDP
END main
答案 0 :(得分:1)
filelist byte 6000 dup(?),0 <<<<<< 6001 bytes filelength dword ? filehandle dword ? mov ecx,10000 <<<<<< 10000 bytes mov filehandle, eax mov edx,offset filelist call ReadFromFile
ReadFromFile 操作将覆盖您以后需要使用的文件句柄 WriteToFile 。
您的代码在实际输出内容之前会错过对 CreateOutputFile 的调用!
从 OpenInputFile 获得的文件句柄不适合。提及 ...输入... 已经说了。
答案 1 :(得分:0)
Irvine的OpenInputFile
仅打开文件以供输入,即用于读取访问权限。但是对于Irvine的WriteToFile
,您需要一个具有写权限的句柄。 Irvine的库没有特定功能来打开具有读写访问权限的文件,您必须使用Windows函数CreateFileA
,该函数在Irvine的SmallWin.inc
中具有原型CreateFile
>
更改
mov edx,offset filename
call OpenInputFile
到
invoke CreateFile, OFFSET filename, GENERIC_READ OR GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0