如何从一个文件复制到另一个?

杰克

我正在尝试从一个文件复制到另一个文件。因此,如果提示用户输入文件名... FILE1,则将保存的字符串复制到文件,然后提示用户输入第二个文件名... File2,文件1的内容将复制到文件2我可以在阅读的部分找到信息,但不确定如何从1复制到另一个?

.model small

.stack 100h

.data

handle      dw ? 

filename    db  26        ;MAX NUMBER OF CHARACTERS ALLOWED (25).
            db  ?         ;LENGTH (NUMBER OF CHARACTERS ENTERED BY USER).
            db  26 dup(0) ;CHARACTERS ENTERED BY USER. END WITH CHR(13).

prompt1 db "ENTER FILE NAME HERE: $" 

mess1       db ' I WIN! $'

.code

main:           
mov ax, @data       ; set up addressability of data
mov ds, ax

;DISPLAY MESSAGE.
lea dx, prompt1            ; load and print the string PROMPT
mov ah, 9
int 21h      

;CAPTURE FILENAME FROM KEYBOARD.                                    
mov ah, 0Ah
mov dx, offset filename ;THIS VARIABLE REQUIRES THE 3-DB FORMAT.
int 21h                

;CAPTURED STRING ENDS WITH CHR(13), BUT TO CREATE FILE WE NEED
;THE FILENAME TO END WITH CHR(0), SO LET'S CHANGE IT.
mov si, offset filename + 1 ;NUMBER OF CHARACTERS ENTERED.
mov cl, [ si ] ;MOVE LENGTH TO CL.
mov ch, 0      ;CLEAR CH TO USE CX. 
inc cx         ;TO REACH CHR(13).
add si, cx     ;NOW SI POINTS TO CHR(13).
mov al, 0
mov [ si ], al ;REPLACE CHR(13) BY 0.            

;CREATE FILE.
mov ah, 3ch         ; dos service to create file
mov cx, 0
mov dx, offset filename + 2 ;CHARACTERS START AT BYTE 2.
int 21h

jc failed                           ; end program if failed

mov handle, ax                      ; save file handle

mov DI, 100 ;CAN'T USE CX BECAUSE WE NEED IT TO WRITE TO FILE.
PL:
;WRITE STRING ON FILE.
mov ah, 40h                         ; write to 
mov bx, handle                      ; file
mov dx, offset mess1                ; where to find data to write
mov cx, 7 ;LENGTH OF STRING IN CX.
int 21h

DEC DI ;DECREASE COUNTER.
jnz PL

mov ah, 3Eh                         ; close file
mov bx, handle                      ; which file
int 21h

failed:





mov ah, 4ch
int 21h

end main
何塞·曼努埃尔·阿巴卡·罗德里格斯

好的,杰克,我已经为您运行过代码,它工作得很好。您需要复制并粘贴其中的某些部分,然后添加三个部分:打开第一个文件,创建另一个文件,然后传输数据。我修改您的代码以实现目标,在这里,将其复制粘贴到您的编译器中,现在让我看看它是否可以正常工作:

    .model small

    .stack 100h

    .data

    handle      dw ? 
    handle2     dw ? 

    filename    db  26        ;MAX NUMBER OF CHARACTERS ALLOWED (25).
                db  ?         ;LENGTH (NUMBER OF CHARACTERS ENTERED BY USER).
                db  26 dup(0) ;CHARACTERS ENTERED BY USER. END WITH CHR(13).

    filename2   db  26        ;MAX NUMBER OF CHARACTERS ALLOWED (25).
                db  ?         ;LENGTH (NUMBER OF CHARACTERS ENTERED BY USER).
                db  26 dup(0) ;CHARACTERS ENTERED BY USER. END WITH CHR(13).

    prompt1 db 13,10,"ENTER FILE NAME HERE: $" 
    prompt2 db 13,10,"ENTER A SECOND FILE NAME: $" 

    mess1       db ' I WIN! $'                                               

    buf         db ?

    .code

    main:           
    mov ax, @data       ; set up addressability of data
    mov ds, ax

;DISPLAY MESSAGE.
    lea dx, prompt1            ; load and print the string PROMPT
    mov ah, 9
    int 21h      

;CAPTURE FILENAME FROM KEYBOARD.                                    
    mov ah, 0Ah
    mov dx, offset filename ;THIS VARIABLE REQUIRES THE 3-DB FORMAT.
    int 21h                

;CAPTURED STRING ENDS WITH CHR(13), BUT TO CREATE FILE WE NEED
;THE FILENAME TO END WITH CHR(0), SO LET'S CHANGE IT.
    mov si, offset filename + 1 ;NUMBER OF CHARACTERS ENTERED.
    mov cl, [ si ] ;MOVE LENGTH TO CL.
    mov ch, 0      ;CLEAR CH TO USE CX. 
    inc cx         ;TO REACH CHR(13).
    add si, cx     ;NOW SI POINTS TO CHR(13).
    mov al, 0
    mov [ si ], al ;REPLACE CHR(13) BY 0.            

;CREATE FILE.
    mov ah, 3ch         ; dos service to create file
    mov cx, 0         ;READ/WRITE MODE.
    mov dx, offset filename + 2 ;CHARACTERS START AT BYTE 2.
    int 21h

    jc failed                           ; end program if failed

    mov handle, ax                      ; save file handle

    mov DI, 100 ;CAN'T USE CX BECAUSE WE NEED IT TO WRITE TO FILE.
    PL:
;WRITE STRING ON FILE.
    mov ah, 40h                         ; write to 
    mov bx, handle                      ; file
    mov dx, offset mess1                ; where to find data to write
    mov cx, 7 ;LENGTH OF STRING IN CX.
    int 21h

    DEC DI ;DECREASE COUNTER.
    jnz PL

;CLOSE FILE.           
    mov ah, 3Eh                         ; close file
    mov bx, handle                      ; which file
    int 21h 

;OPEN FILE TO READ FROM IT.
    mov ah, 3DH
    mov al, 0   ;READ MODE.
    mov dx, offset filename + 2
    int 21h
    mov handle, ax                      ; save file handle

;DISPLAY MESSAGE FOR SECOND FILE.
    lea dx, prompt2            ; load and print the string PROMPT
    mov ah, 9
    int 21h      

;CAPTURE FILENAME FROM KEYBOARD.                                    
    mov ah, 0Ah
    mov dx, offset filename2 ;THIS VARIABLE REQUIRES THE 3-DB FORMAT.
    int 21h                

;CAPTURED STRING ENDS WITH CHR(13), BUT TO CREATE FILE WE NEED
;THE FILENAME TO END WITH CHR(0), SO LET'S CHANGE IT.
    mov si, offset filename2 + 1 ;NUMBER OF CHARACTERS ENTERED.
    mov cl, [ si ] ;MOVE LENGTH TO CL.
    mov ch, 0      ;CLEAR CH TO USE CX. 
    inc cx         ;TO REACH CHR(13).
    add si, cx     ;NOW SI POINTS TO CHR(13).
    mov al, 0
    mov [ si ], al ;REPLACE CHR(13) BY 0.            

;CREATE FILE.
    mov ah, 3ch         ; dos service to create file
    mov cx, 0    ;READ/WRITE MODE.
    mov dx, offset filename2 + 2 ;CHARACTERS START AT BYTE 2.
    int 21h

    jc failed                           ; end program if failed

    mov handle2, ax                      ; save file handle

;READ ALL BYTES FROM FIRST FILE AND WRITE THEM TO SECOND FILE.

reading:
;READ ONE BYTE.
    mov ah, 3FH
    mov bx, handle
    mov cx, 1           ;HOW MANY BYTES TO READ.
    mov dx, offset buf  ;THE BYTE WILL BE STORED HERE.
    int 21h             ;NUMBER OF BYTES READ RETURNS IN AX.
;CHECK EOF (END OF FILE).
    cmp ax, 0  ;IF AX == 0 THEN EOF.
    je  eof              
;WRITE BYTE TO THE SECOND FILE.           
    mov ah, 40h                         ; write to 
    mov bx, handle2                     ; file
    mov dx, offset buf                  ; where to find data to write
    mov cx, 1 ;LENGTH OF STRING IN CX.
    int 21h
    jmp reading ;REPEAT PROCESS.
eof:
;CLOSE FILES.           
    mov ah, 3Eh                         ; close file
    mov bx, handle                      ; which file
    int 21h 
    mov ah, 3Eh                         ; close file
    mov bx, handle2                     ; which file
    int 21h 

    failed:

    mov ah, 4ch
    int 21h

    end main

顺便说一句:一次读取一个字节效率不高,实际上,如果文件不太大,则可以一次读取所有字节(效率很高)。另一种选择是读取字节为2乘2或10乘10,因为最后读取的字节可能少于10个字节。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将权限从一个文件复制到另一个文件

来自分类Dev

如何在Java中将文件属性从一个文件复制到另一个文件?

来自分类Dev

将文件从一个目录复制到另一个

来自分类Dev

将文件从一个目录复制到另一个目录

来自分类Dev

将文件从一个拉链复制到另一个?

来自分类Dev

将文件从一个拉链复制到另一个?

来自分类Dev

将文件从一个NAS复制到另一个

来自分类Dev

将文件从一个目录复制到另一个目录

来自分类Dev

将文件从一个目录复制到另一个目录

来自分类Dev

将条目从一个keepass文件复制到另一个

来自分类Dev

如何将组图层集从一个文件复制到另一个文件?

来自分类Dev

如何使用VBA将文件从一个目录复制到另一个目录

来自分类Dev

如何将AIX上的文件从一个FS复制到另一个FS?

来自分类Dev

如何将每个文件的目录从一个硬盘复制到另一个硬盘?

来自分类Dev

Powershell:如何将文件从一个目录复制到另一个目录

来自分类Dev

如何将每行X行从一堆文件复制到另一个文件?

来自分类Dev

将文件系统元数据(modifyDate 等)从一个文件复制到另一个文件

来自分类Dev

将文件从一个文件夹复制到另一个文件夹

来自分类Dev

将最后一行从一个excel文件复制到另一个

来自分类Dev

在Python中将“ N”行从一个文件复制到另一个文件?

来自分类常见问题

使用Bash将单词从一个文件复制到另一个文件

来自分类Dev

在cpp中将单词从一个文件复制到另一个文件

来自分类Dev

在cpp中将单词从一个文件复制到另一个文件

来自分类Dev

批处理-将特定文本从一个文件复制到另一个文件

来自分类Dev

Ubuntu终端将行号N从一个文件复制到另一个文件

来自分类Dev

使用Bash将单词从一个文件复制到另一个文件

来自分类Dev

Ubuntu终端将行号N从一个文件复制到另一个文件

来自分类Dev

将代码从一个文件复制到另一个文件的命令

来自分类Dev

将文件名从一个文件夹复制到另一个

Related 相关文章

  1. 1

    将权限从一个文件复制到另一个文件

  2. 2

    如何在Java中将文件属性从一个文件复制到另一个文件?

  3. 3

    将文件从一个目录复制到另一个

  4. 4

    将文件从一个目录复制到另一个目录

  5. 5

    将文件从一个拉链复制到另一个?

  6. 6

    将文件从一个拉链复制到另一个?

  7. 7

    将文件从一个NAS复制到另一个

  8. 8

    将文件从一个目录复制到另一个目录

  9. 9

    将文件从一个目录复制到另一个目录

  10. 10

    将条目从一个keepass文件复制到另一个

  11. 11

    如何将组图层集从一个文件复制到另一个文件?

  12. 12

    如何使用VBA将文件从一个目录复制到另一个目录

  13. 13

    如何将AIX上的文件从一个FS复制到另一个FS?

  14. 14

    如何将每个文件的目录从一个硬盘复制到另一个硬盘?

  15. 15

    Powershell:如何将文件从一个目录复制到另一个目录

  16. 16

    如何将每行X行从一堆文件复制到另一个文件?

  17. 17

    将文件系统元数据(modifyDate 等)从一个文件复制到另一个文件

  18. 18

    将文件从一个文件夹复制到另一个文件夹

  19. 19

    将最后一行从一个excel文件复制到另一个

  20. 20

    在Python中将“ N”行从一个文件复制到另一个文件?

  21. 21

    使用Bash将单词从一个文件复制到另一个文件

  22. 22

    在cpp中将单词从一个文件复制到另一个文件

  23. 23

    在cpp中将单词从一个文件复制到另一个文件

  24. 24

    批处理-将特定文本从一个文件复制到另一个文件

  25. 25

    Ubuntu终端将行号N从一个文件复制到另一个文件

  26. 26

    使用Bash将单词从一个文件复制到另一个文件

  27. 27

    Ubuntu终端将行号N从一个文件复制到另一个文件

  28. 28

    将代码从一个文件复制到另一个文件的命令

  29. 29

    将文件名从一个文件夹复制到另一个

热门标签

归档