<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=StartprogrammingusingObjectPascal%3ACopyFilesUsingUntypedFilesProgram</id>
	<title>StartprogrammingusingObjectPascal:CopyFilesUsingUntypedFilesProgram - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://trans.onionmixer.net/wiki/index.php?action=history&amp;feed=atom&amp;title=StartprogrammingusingObjectPascal%3ACopyFilesUsingUntypedFilesProgram"/>
	<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=StartprogrammingusingObjectPascal:CopyFilesUsingUntypedFilesProgram&amp;action=history"/>
	<updated>2026-05-01T07:39:17Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.43.3</generator>
	<entry>
		<id>https://trans.onionmixer.net/wiki/index.php?title=StartprogrammingusingObjectPascal:CopyFilesUsingUntypedFilesProgram&amp;diff=260&amp;oldid=prev</id>
		<title>Onionmixer: SPOP 비형식화된파일을사용하는파일복사프로그램 페이지 추가</title>
		<link rel="alternate" type="text/html" href="https://trans.onionmixer.net/wiki/index.php?title=StartprogrammingusingObjectPascal:CopyFilesUsingUntypedFilesProgram&amp;diff=260&amp;oldid=prev"/>
		<updated>2012-07-26T10:00:07Z</updated>

		<summary type="html">&lt;p&gt;SPOP 비형식화된파일을사용하는파일복사프로그램 페이지 추가&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;===비형식화 된 파일을 사용하는 파일 복사 프로그램===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
Program FilesCopy2;&lt;br /&gt;
&lt;br /&gt;
{$mode objfpc}{$H+}&lt;br /&gt;
&lt;br /&gt;
uses&lt;br /&gt;
    {$IFDEF UNIX}{$IFDEF UseCThreads}&lt;br /&gt;
    cthreads,&lt;br /&gt;
    {$ENDIF}{$ENDIF}&lt;br /&gt;
    Classes, SysUtils&lt;br /&gt;
    { you can add units after this };&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
    SourceName, DestName: string;&lt;br /&gt;
    SourceF, DestF: file;&lt;br /&gt;
    Block: array [0 .. 1023] of Byte;&lt;br /&gt;
    NumRead: Integer;&lt;br /&gt;
begin&lt;br /&gt;
    Writeln(&amp;#039;Files copy&amp;#039;);&lt;br /&gt;
    Write(&amp;#039;Input source file name: &amp;#039;);&lt;br /&gt;
    Readln(SourceName);&lt;br /&gt;
    Write(&amp;#039;Input destination file name: &amp;#039;);&lt;br /&gt;
    Readln(DestName);&lt;br /&gt;
&lt;br /&gt;
    if FileExists(SourceName) then&lt;br /&gt;
    begin&lt;br /&gt;
        AssignFile(SourceF, SourceName);&lt;br /&gt;
        AssignFile(DestF, DestName);&lt;br /&gt;
&lt;br /&gt;
        FileMode:= 0;          // open for read only&lt;br /&gt;
        Reset(SourceF, 1); // open source file&lt;br /&gt;
        Rewrite(DestF, 1); // Create destination file&lt;br /&gt;
&lt;br /&gt;
        // Start copy&lt;br /&gt;
        Writeln(&amp;#039;Copying..&amp;#039;);&lt;br /&gt;
        while not Eof(SourceF) do&lt;br /&gt;
        begin&lt;br /&gt;
            // Read Byte from source file&lt;br /&gt;
            BlockRead(SourceF, Block, SizeOf(Block), NumRead);&lt;br /&gt;
            // Write this byte into new destination file&lt;br /&gt;
            BlockWrite(DestF, Block, NumRead);&lt;br /&gt;
        end;&lt;br /&gt;
        CloseFile(SourceF);&lt;br /&gt;
        CloseFile(DestF);&lt;br /&gt;
    end&lt;br /&gt;
    else // Source File not found&lt;br /&gt;
        Writeln(&amp;#039;Source File does not exist&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
    Write(&amp;#039;Copy file is finished, press enter key to close..&amp;#039;);&lt;br /&gt;
    Readln;&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
앞의 예제에서 새로운 것은&lt;br /&gt;
&lt;br /&gt;
1. 파일의 선언 형식&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
SourceF, DestF: file;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. 읽기/쓰기 변수 (Buffer)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
Block: array [0 .. 1023] of Byte;&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
파일의 블록을 읽고 복사하기 위해 (1킬로바이트의 수정할 수 있는)바이트 배열을 사용했습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. 추가 인자를 필요로 하는 비형식화된 파일 열기&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
        Reset(SourceF, 1); // open source file&lt;br /&gt;
        Rewrite(DestF, 1); // Create destination file&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
추가 인자는 한 번에 읽고 쓸 수 있는 가장 작은 요소인 레코드의 크기 입니다. 임의의 파일 형식을 복사하려 할 때 1 바이트가 될 수도 있다는 의미인데, 임의의 파일 사이즈에 대해 사용할 수 있기 때문입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. Read 프로시저&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
    BlockRead(SourceF, Block, SizeOf(Block), NumRead);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;BlockRead&amp;#039;&amp;#039; 프로시저는 비형식화 된 파일에 사용합니다. 한 번에 많은 양의 데이터를 읽습니다.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;BlockRead&amp;#039;&amp;#039; 프로시저의 인자는 다음과 같습니다.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SourceF&amp;#039;&amp;#039;&amp;#039; : 복사하려는 원본 파일 변수입니다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Block&amp;#039;&amp;#039;&amp;#039; : 읽고 쓸 현재 데이터를 저장할 변수나 배열입니다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SizeOf(Block)&amp;#039;&amp;#039;&amp;#039; : 한번에 읽을 레코드의 수를 결정한 값입니다. 예를 들어 100을 입력했다면, 100 개의 레코드(이 경우의 단위는 바이트입니다)를 읽으려 한다는 의미입니다. &amp;#039;&amp;#039;SizeOf&amp;#039;&amp;#039; 함수를 사용한다면, 보통 컨테이너(바이트 배열)의 수만큼 레코드를 읽으려 한다는 의미입니다.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;NumRead&amp;#039;&amp;#039;&amp;#039; : 정해진 레코드 수(1024) 만큼 읽어 들이라고 &amp;#039;&amp;#039;BlockRead&amp;#039;&amp;#039; 함수에 알렸지만, 때로는 모든 레코드 수만큼 읽어들이기도 하지만, 일부만 읽어들이기도 합니다. 예를 들어 100 바이트만 들어있는 파일을 읽어들이려 한다면, &amp;#039;&amp;#039;BlockRead&amp;#039;&amp;#039;는 100바이트만 읽을 수 있다는 뜻입니다. 또한 정해진 양보다 적은 레코드를 읽어들이는 것은 파일의 마지막 블록에서도 일어날 수 있습니다. 예를 들어, 만약 1034 바이트가 들어있는 파일을 읽어들인다면, 처음 순환 과정에서는 1024 바이트를 읽어들이겠지만, 그 다음 순환 과정에서는 남은 10바이트만 읽어들일 것이고 &amp;#039;&amp;#039;Eof&amp;#039;&amp;#039; 함수는 &amp;#039;&amp;#039;True&amp;#039;&amp;#039;를 되돌릴 것입니다. &amp;#039;&amp;#039;BlockWrite&amp;#039;&amp;#039; 프로시저와 함께 사용하려면 &amp;#039;&amp;#039;NumRead&amp;#039;&amp;#039; 값이 필요합니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. 비형식화 된 파일에 기록&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
BlockWrite(DestF, Block, NumRead);&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
쓰기 프로시저이며, &amp;#039;&amp;#039;BlockRead&amp;#039;&amp;#039; 프로시저와 유사하지만, 몇 가지 차이점이 있습니다.&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;SizeOf&amp;#039;&amp;#039; 프로시저를 사용하는 대신에 &amp;#039;&amp;#039;NumRead&amp;#039;&amp;#039;를 사용했는데, &amp;#039;&amp;#039;NumRead&amp;#039;&amp;#039;에 실제 읽어들인 블록 크기가 들어있기 때문입니다&lt;br /&gt;
# 네번째 인자인 &amp;#039;&amp;#039;NumWritten&amp;#039;&amp;#039;(여기 예제에는 없습니다)은 중요하지 않은데, 디스크가 가득 차기 전까지는 우리가 정한 대로 항상 기록한 레코드를 가져오기 때문입니다.&lt;br /&gt;
&lt;br /&gt;
이 프로그램을 실행한 후, 큰 파일을 복사하는 속도에 주목해봅니다. 파일에 1메가바이트가 들어있다면, 전체 파일을 복사하는데 읽기/쓰기에 필요한 횟수가 대략 천 번 정도밖에 되지 않습니다.&lt;br /&gt;
&lt;br /&gt;
다음 예제에서는 임의의 파일을 읽기 위해 비형식화 된 파일을 사용할 것이며, 메모리나 디스크에 저장한 내용을 보여줄 것입니다. 아시는 바와 같이, 파일은 바이트의 목록입니다.&lt;br /&gt;
[[Category:StartprogrammingusingObjectPascal]]&lt;/div&gt;</summary>
		<author><name>Onionmixer</name></author>
	</entry>
</feed>