Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 06.04.2011, 23:50   #1
Ibanez Wizard
Адский тунеядец
Форумчанин
 
Аватар для Ibanez Wizard
 
Регистрация: 11.06.2010
Сообщений: 164
По умолчанию Работа с файлами. Замена предыдущего текста на новый.

Начал читать книгу по криптографии и первый пример шифра был шифр цезаря. На основе прочитанного, решил написать программу, которая бы шифровала содержимое текстового файла. При написании сей программы, встретилась следующая проблема: шифрованный текст записывается в конец исходного, а надо чтобы заменял. Исправьте пожалуйста как надо.


Код:
.386
.model flat, stdcall
option casemap : none
include\masm32\include\windows.inc
include\masm32\include\kernel32.inc
include\masm32\include\user32.inc
includelib\masm32\lib\kernel32.lib
includelib\masm32\lib\user32.lib

.data?
hFile dd ?
buffer db 10 dup(?)
cWrite dd ?
cRead dd ?
.data
fName db "file.txt", 0
i dd 8

.code
start:
invoke CreateFile, addr fName, GENERIC_READ or GENERIC_WRITE, \
				0,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, NULL
mov hFile, eax
invoke ReadFile, hFile, addr buffer, i, addr cRead, NULL
call _shifr
invoke WriteFile, hFile, addr buffer, i, addr cWrite, NULL
invoke CloseHandle, hFile
invoke ExitProcess, 0

_strlen proc
lea edi, buffer
xor eax,eax
@1:
inc eax
cmp byte ptr[eax+edi],0
jnz @1	
mov i, eax
ret


_shifr proc
cld
xor eax, eax
lea esi, buffer
lea edi, buffer
mov ecx, i
@1:
lodsb
add eax, 3
stosb
loop @1
ret
_shifr endp
_strlen endp

end start
P.S. Написанный мною алгоритм не совсем полный. Просьба об этом не упоминать.
Ibanez Wizard вне форума Ответить с цитированием
Старый 07.04.2011, 00:30   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,002
По умолчанию

добавь перед записью в файл.
Код:
invoke SetFilePointer,hFile,0,0,FILE_BEGIN  ;сместили позицию на начало файла
invoke SetEndOfFile,hFile   ;установили размер файла по позиции(то есть в ноль)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена текста в html Sheva-roller JavaScript, Ajax 2 23.01.2011 23:03
Замена текста в ячейке Пашка_1977 Microsoft Office Excel 3 17.08.2010 22:54
Замена текста Lived08 Microsoft Office Excel 11 28.07.2010 14:20
замена текста designer999 Общие вопросы Delphi 5 23.03.2010 18:31
замена текста zetrix Microsoft Office Excel 0 31.10.2006 08:54


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS