|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Окт 27, 2003 10:43:09 Подскажите пожалуйста, как в MASM'е открываеться файл для чтение, записи и как из одного файла считывать и записывать в другой файл. Заранее спасибо. |
|
|
Дата: Окт 27, 2003 11:52:09 Gromozeka Смотри CreateFile, ReadFile, WriteFile, CloseHandle на msdn и 12 урок из Туториалы Iczelion'а by Iczelion |
|
|
Дата: Окт 27, 2003 19:58:20 · Поправил: Gromozeka Подскажите что надо иправить, что-бы данная программа считывала из файла данные и выводила их на экран. .386 .model flat, stdcall option casemap :none ; case sensitive include c:\masm32\include\windows.inc include c:\masm32\include\kernel32.inc includelib c:\masm32\lib\kernel32.lib include \masm32\include\user32.inc include \masm32\include\comdlg32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\comdlg32.lib .const IDM_OPEN equ 1 IDM_SAVE equ 2 IDM_EXIT equ 3 MAXSIZE equ 260 MEMSIZE equ 65535 .data FileName db "c:\masm32\bin\first.txt",0 Generic_Read dw ? File_Share_Write DW ? File_Atribute_ReadOnly dw ? Msg1 db "Type something > " Msg2 db "Data of file > " ConsoleTitle db 'Input & Output',0 buffer db MAXSIZE dup(0) .DATA? hInstance HINSTANCE ? CommandLine LPSTR ? hwndEdit HWND ? hFile HANDLE ? hMemory HANDLE ? pMemory DWORD ? SizeReadWrite DWORD ? .code Main proc LOCAL InputBuffer[128] :BYTE ;буффер для ввода LOCAL hOutPut :DWORD ;хэндл для вывода LOCAL hInput :DWORD ;хэндл для ввода LOCAL lpszBuffer :DWORD ;адрес буфера LOCAL nRead :DWORD ;прочитано байт LOCAL nWriten :DWORD ;напечатано байт LOCAL hStdIn :DWORD invoke SetConsoleTitle, addr ConsoleTitle invoke GetStdHandle, STD_OUTPUT_HANDLE mov hOutPut, eax invoke GetStdHandle, STD_INPUT_HANDLE mov hInput, eax invoke CreateFile, ADDR buffer,GENERIC_READ , FILE_SHARE_READ , NULL,OPEN_EXISTING,FILE_ATTRIBUTE_READONLY, NULL mov hFile, eax invoke GlobalAlloc,GMEM_MOVEABLE or GMEM_ZEROINIT,MEMSIZE mov hMemory,eax invoke ReadFile,hFile,pMemory,MEMSIZE-1,ADDR SizeReadWrite,NULL ;MOV hFile,eax ;Mov hOutPut,eax invoke WriteConsole, hOutPut, addr Msg2, 15, addr nWriten, NULL invoke WriteConsole, hOutPut, addr hMemory, nRead, addr nWriten, NULL invoke Sleep, 3000d invoke ExitProcess,0 Main endp end Main |
|
|
Дата: Окт 28, 2003 01:59:23 Gromozeka Править здесь много ;) Лучше возьми этот исходник, там уже все нормально. Кстати, для кода существует специальный тег "Код". Его использование хоть и не обязательное, но все же желательное, т.к. с ним исходник более читабельный. _263696037__Source.zip |
|
|
Дата: Окт 28, 2003 11:24:42 Sk. Inc. А как теперь зделать так что бы можно было из файла считывать построчно и записывать в файл. |
|
|
Дата: Окт 28, 2003 12:50:01 Gromozeka Что есть посторочно? Признак конца строки 0Dh+0Ah или только 0Dh? Читай кусок из файла память, если файл маленький, то весь сразу, и ищи свой "конец строки". Участки между концами пиши в файл. Если использовать mmf, то еще проще. |
|
|
Дата: Окт 28, 2003 14:08:02 А как теперь зделать так что бы можно было из файла считывать построчно и записывать в файл. Дааа, влияние ЯВУ губительно сказывается %) Файл -- это только Данные и ничего более |
|
|
Дата: Окт 28, 2003 14:10:34 Gromozeka Да, ещё вопрос. А для чего это??? .const IDM_OPEN equ 1 IDM_SAVE equ 2 IDM_EXIT equ 3 MAXSIZE equ 260 MEMSIZE equ 65535 Вы мне объёсните какая связь между EQU и .const!!! Я уже 2 раз замечаю это непонятное явление. |
|
|
Дата: Окт 28, 2003 14:19:41 Gromozeka q_q вобщем-то прав, читать построчно нельзя, поэтому искать конец строки нужно будет самостоятельно. Хотя, возможно, есть какие-нибудь библиотеки (в С/С++, например) которые помогут тебе сделать это. q_q А что такое mmf? |
|
|
Дата: Окт 28, 2003 14:29:27 · Поправил: Sk. Inc. Edmond 1) Если ты про: IDM_OPEN equ 1 IDM_SAVE equ 2 IDM_EXIT equ 3 MAXSIZE equ 260 MEMSIZE equ 65535то там много и других ненужных объявлений. Видимо этот исходник является куском какой-то программы. 2) объёсните какая связь между EQU и .const!!! Согласен, таким образом можно объявлять константы в любом месте исходника, но более читабельно будет поместить все константы в секцию констант, это же не ошибка :) |
|
|
Дата: Окт 28, 2003 14:35:39 http://library.tu.edu.te.ua/libsearch/ftp.php?ch=%2FTechDoc%2FProgramm ing%2FwinAPI Здесь лежат интересные книги, в том числе и по рабате с файлами :) rumiantsev.zip, если не ошибаюсь. |
|
|
Дата: Окт 28, 2003 15:28:44 Sk. Inc. предложил мне взять его программу так в моей много надо исправлять, я взял. И попытался ее переделать так, что бы она, для начала,считывала посимвольно до конца строки и выводила это все на экран и записывало в файл, но у меня ничего не получилось.Помогите пожалуйста!!! .386 .model flat, stdcall option casemap :none ; case sensitive ;--------------------------------------------------------------------- ----------- include c:\masm32\include\kernel32.inc include c:\masm32\include\masm32.inc include c:\masm32\include\windows.inc includelib kernel32.lib includelib masm32.lib includelib user32.lib ;--------------------------------------------------------------------- ----------- .const ;--------------------------------------------------------------------- ----------- MEMSIZE equ 2 ;--------------------------------------------------------------------- ----------- .data ;--------------------------------------------------------------------- ----------- FileName db "c:\test.txt",0 Msg2 db "Data of file > " ConsoleTitle db 'Input & Output',0 ;--------------------------------------------------------------------- ----------- .data? ;--------------------------------------------------------------------- ----------- hInstance HINSTANCE ? CommandLine LPSTR ? hwndEdit HWND ? hFile HANDLE ? hMemory HANDLE ? pMemory DWORD ? ;--------------------------------------------------------------------- ----------- .code Main proc ;--------------------------------------------------------------------- ----------- LOCAL hOutPut :DWORD ;хэндл для вывода LOCAL nRead :DWORD ;прочитано байт LOCAL nWriten :DWORD ;напечатано байт ;--------------------------------------------------------------------- ----------- invoke AllocConsole ; создаем консоль invoke ClearScreen invoke SetConsoleTitle,addr ConsoleTitle invoke GetStdHandle,STD_OUTPUT_HANDLE mov hOutPut,eax invoke CreateFile,offset FileName,GENERIC_READ,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NU LL mov hFile,eax invoke GlobalAlloc,GMEM_ZEROINIT,MEMSIZE mov hMemory,eax @@1: invoke ReadFile,hFile,hMemory,MEMSIZE-1,ADDR nRead,NULL invoke WriteConsole,hOutPut,addr Msg2,15,addr nWriten,NULL invoke WriteConsole,hOutPut,hMemory,nRead,addr nWriten,NULL mov eax,hOutPut cmp byte ptr [eax],0dh jne @@1 invoke Sleep,2000d invoke FreeConsole ; удаляем консоль invoke ExitProcess,0 Main endp end Main |
|
|
Дата: Окт 28, 2003 16:28:21 Дык в строке 52 надо в eax грузить указатель на память, а не хэндл консоли "mov eax,hMemory" вместо "mov eax,hOutPut" |
|
|
Дата: Окт 28, 2003 18:37:16 Sk. Inc. Согласен, таким образом можно объявлять константы в любом месте исходника, но более читабельно будет поместить все константы в секцию констант, это же не ошибка :) Нет, просто кое кто в одной статье написал, что связаны.. :/ |
|
|
Дата: Окт 28, 2003 19:44:58 Gromozeka 1. Кворум требует убрать ".const" 2. Читать файл посимвольно - признак ЯВУ :-) 3. Буфер лучше создавать через HeapAlloc: invoke GetProcessHeap invoke HeapAlloc,eax,0,MEMSIZE mov hMemory,eax ... invoke GetProcessHeap invoke HeapFree,eax,0,hMemory |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.073 |