создание файла в сборке 16 бит с длинным именем файла - PullRequest
2 голосов
/ 22 апреля 2020

a сделали профи c, который создает для меня файл (в сборке 16 бит в коробке с DOS), и он прекрасно работает с коротким именем файла (см. Ниже). однако, если имя превышает 8 символов, все остальные удаляются. например, для пути: 'logs \ log_YYYY_MM_DD.log', 0 он создаст файл с именем log_YYYY.log, как я могу сделать файл с именем длиннее 8 символов. Спасибо.

;---------------------------CreateFile-----------------------------
; Description:  create a file.
; param 1:      [in] address of File name path.
; Param 2:      [out] address of File handle.
; Return:       File handle.
;------------------------------------------------------------------
proc CreateFile
    pusha
    mov bp, sp

    @CreateFile@FileName        equ [word ptr bp + 20]
    @CreateFile@FileHandle      equ [word ptr bp + 18]

    mov ah, 3ch                     ; create file
    mov cx, 0                       ; file attribute
    mov dx, @CreateFile@FileName    ; file name 
    int 21h

    jc @CreateFile@Error
    mov bx, @CreateFile@FileHandle  
    mov [word ptr bx], ax

    jmp @CreateFile@End
@CreateFile@Error:
    call PrintFileError     ;prints an error msg

@CreateFile@End:    
    popa
    ret 2
endp CreateFile

1 Ответ

3 голосов
/ 22 апреля 2020

как мне сделать файл с именем длиннее 8 символов

Вы не можете. DOS поддерживает только 8.3 имен файлов.


В частности, версия DOS, реализованная в DOSBox, не поддерживает длинные имена файлов.

Из Википедия :

Форки, такие как DOSBox SVN Daum и DOSBox SVN-lfn, предоставляют дополнительные функции, которые включают поддержку состояний сохранения и длинных имен файлов (LFN)

Так что есть варианты DOSBox, которые поддерживают длинные имена файлов, но основная версия делает.

...