Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.07.2010, 15:25   #1
Ra88
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 21
По умолчанию Имя файла

Здравствуйте! Хочу создать файл с именем, которое сам ввиду в командной строке. И собственно чёто разобраться не могу, видимо изначально выбрал не правильный подход. Делаю так:

.....библиотеки тут короче подключил
Код:
        .data
 fName db 128 dup(?)		; имя файла
 stdin dd ?			; дескриптор клавиатуры
 stdout dd ?			; дескриптор экрана
 fN1 db 128 dup(?)
 fHandle dd ?			; дескриптор файла
 cWritten dd ?			; сдесь будет храниться кол-во    действительно записанных в файл символов
 cRead dd ?
         .code
start:
invoke GetStdHandle,STD_INPUT_HANDLE
mov stdin,eax
; цикл для ввода названия
   text:
invoke ReadConsole,stdin,addr fName,128,addr         cRead,NULL			; вводим название файла
cmp cRead,2		           ; по двойному нажатию на enter выходим
   ja text

invoke CreateFile,addr fName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,0 ; создаём файл
 invoke CloseHandle,fHandle
 invoke ExitProcess,0
 end start
Вот так значит. Если имя файла задать в переменной ( fName db simple,0 ) то нормально создаст. Но надо чтобы имя файла задавалось.

Последний раз редактировалось Stilet; 07.07.2010 в 15:53.
Ra88 вне форума Ответить с цитированием
Старый 07.07.2010, 16:49   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Не создает оно потому что ReadConsole вместе с именем файла записывает в переменку символ перевода каретки.
Потом CreateFile смотрит на это имя с символом Энтера, и понимает что такое в имени файла присутствовать не должно, потому и не создает.

Тебе нужно после ввода обнулять последнее два байта в имени

Вот смотри:
Код:
format PE console
entry start
 
include 'D:\fasmw16726\INCLUDE\win32ax.inc'
;include 'D:\fasmw16726\INCLUDE\API\KERNEL32.INC'
section '.data' data readable writeable

 fName db 128 dup(0)            ; имя файла
 stdin dd ?                     ; дескриптор клавиатуры
 stdout dd ?                    ; дескриптор экрана
 fN1 db 128 dup(?)
 fHandle dd ?                   ; дескриптор файла
 cWritten dd ?                  ; сдесь будет храниться кол-во    действительно записанных в файл символов
 cRead dd ?


section '.code' code readable executable
start:

invoke GetStdHandle,STD_INPUT_HANDLE
mov [stdin],eax

invoke ReadConsole,[stdin],addr fName,128,addr         cRead,NULL                 ; вводим название файла

mov eax,fName
add eax,[cRead]
sub eax,2
mov word [eax],0


invoke CreateFile,addr fName,GENERIC_WRITE,0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,0 ; создаём файл
 invoke CloseHandle,eax


 ; cinvoke getch
; INVOKE аналогичный макрос для STDCALL-функций. 
  invoke ExitProcess,0

section '.idata' import data readable
library kernel,'kernel32.dll',\
        msvcrt,'msvcrt.dll'
 
import kernel,\
       ExitProcess,'ExitProcess',\
       GetStdHandle,'GetStdHandle',\
       ReadConsole,'ReadConsoleA',\
       CreateFile,'CreateFileA',\
       CloseHandle,'CloseHandle'
I'm learning to live...

Последний раз редактировалось Stilet; 07.07.2010 в 17:05.
Stilet вне форума Ответить с цитированием
Старый 08.07.2010, 08:38   #3
Ra88
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 21
По умолчанию

СПАСИБКИ УМНЫЙ ЧЕЛОВЕК !!! )))
Ra88 вне форума Ответить с цитированием
Старый 08.07.2010, 08:43   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Пожалуйста.
Ты в следующий раз не поленись, и отладчиком по программе пройдись - он оч. хорошее средство выяснения причин неработки.
Да и кстати - коды ошибок через GetLastError тоже стоило бы прикрутить, ведь WIN API не сообщает о сбое.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.07.2010, 08:48   #5
Ra88
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 21
По умолчанию

Окай учитель так и сделаем !!! )))
Ra88 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
имя файла ? somwan Общие вопросы C/C++ 1 18.03.2009 17:46
Имя файла в ListBox Dr.Badnezz Общие вопросы Delphi 3 23.09.2008 17:56
Изменить имя файла. Манжосов Денис :) Помощь студентам 8 05.05.2008 00:12
Вырезать имя файла froggy Общие вопросы Delphi 9 06.04.2008 09:45
Имя файла по расширению wwww Общие вопросы Delphi 5 19.12.2007 03:41