Почему моя функция записи файлов не работает? - PullRequest
0 голосов
/ 27 декабря 2018

Функция чтения файла работает отлично, но запись вообще не работает. Пожалуйста, помогите мне решить эту проблему.Даже я не могу найти точную проблему.

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

Ответы [ 2 ]

0 голосов
/ 27 декабря 2018

Ирвин OpenInputFile открывает файл только для ввода, то есть для доступа к чтению.Но для WriteToFile Ирвина вам понадобится ручка с доступом для записи.В библиотеке Ирвина нет специальной функции для открытия файла с правами доступа на чтение и запись, необходимо использовать функцию Windows CreateFileA с прототипом CreateFile вSmallWin.inc

от Irvine * Изменить

mov edx,offset filename
call OpenInputFile

на

invoke CreateFile, OFFSET filename, GENERIC_READ OR GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, 0
0 голосов
/ 27 декабря 2018
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 , не подходит.Упоминание ... Ввод ... уже говорит об этом.

...