StartprogrammingusingObjectPascal:CopyFilesUsingFileOfByte

From 흡혈양파의 번역工房
Jump to: navigation, search

file of Byte를 사용하여 파일 복사하기

Program FilesCopy;

{$mode objfpc}{$H+}

uses
    {$IFDEF UNIX}{$IFDEF UseCThreads}
    cthreads,
    {$ENDIF}{$ENDIF}
    Classes, SysUtils
    { you can add units after this };

var
    SourceName, DestName: string;
    SourceF, DestF: file of Byte;
    Block: Byte;
begin
    Writeln('Files copy');
    Write('Input source file name: ');
    Readln(SourceName);
    Write('Input destination file name: ');
    Readln(DestName);
    if FileExists(SourceName) then
    begin
        AssignFile(SourceF, SourceName);
        AssignFile(DestF, DestName);

        FileMode:= 0;        // open for read only

        Reset(SourceF); // open source file
        Rewrite(DestF); // Create destination file

        // Start copy
        Writeln('Copying..');
        while not Eof(SourceF) do
        begin
            Read(SourceF, Block); // Read Byte from source file
            Write(DestF, Block); // Write this byte into new
                                                     // destination file
        end;
        CloseFile(SourceF);
        CloseFile(DestF);
    end

    else // Source File not found
        Writeln('Source File does not exist');
    Write('Copy file is finished, press enter key to close..');
    Readln;
end.

앞의 예제를 실행하면, 기존의 파일 이름과 새 대상 파일 이름을 입력할 것입니다. 리눅스에서는 파일 이름을 다음처럼 입력할 수 있습니다.

Input source file name: /home/motaz/quran/mishari/32.mp3
Input destination file name: /home/motaz/Alsajda.mp3

윈도우즈에서는 다음처럼 입력할 수 있습니다.

Input source file name: c:\photos\mypphoto.jpg
Input destination file name: c:\temp\copy.jpg

만약 FileCopy 프로그램과 같은 디렉터리에 원본 파일이 있다면, 다음처럼 파일 이름만 입력할 수 있습니다.

Input source file name: test.pas
Input destination file name: testcopy.pas

큰 파일을 복사하기 위해 이 방법을 사용하면, 운영체제의 복사 프로시저와 비교해서 매우 많은 시간이 걸릴 것입니다. 이는 운영체제가 파일을 복사하기 위해 다른 기술을 사용한다는 것을 의미합니다. 만약 1메가바이트 파일을 복사하려 한다면, 1백만 번 while 순환문을 반복해야 한다는 것인데, 이는 곧 백만 번 읽고 백만 번 쓰는 동작을 수행한다는 것입니다. file of Byte를 file of Word 선언으로 대체하면, 읽기 쓰기를 500,000 번 수행하는 의미가 되지만, 파일 크기가 홀수가 아닌 짝수일 경우에만 동작할 것입니다. 만약 파일이 1,420 바이트를 가지고 있다면 잘 동작하겠지만, 1,423 바이트를 가지고 있다면 실패할 것입니다.

더 빠른 방법으로 어떤 종류의 파일이든 복사하기 위해, 비형식적 파일을 사용할 것입니다.