If we’re talking about ancient DOS or PIP (remember PIP?) copying commands, the status of a file could be important. Copying can give you LOTS of data that isn’t SIGNIFICANT to an application, but may be stored in a file. That is typically the case for a text file (we’re talking old-school, here) where data after the EOF marker (zero hex, Control/Z, or whatever) may be stored to a disk, then restored from a disk, but not intended to be used by the text-editing or displaying application.
Early OSes did not store the true file size, but a multiple of the blocks. Text apps usually read the data sequentially, and needed to know exactly, to the byte, where to stop, and the EOF marker determined that.
Why do you think the DOS COPY command had /a and /b parameters?
Let me illustrate…
Here’s a sample text string:
“Now is the time for all good men to come to.^Z”
That’s 45 characters, including spaces and EOF marker. Let’s assume the minimum data block on our theoretical hard drive is 64 characters (ignoring headers, checksums, etc.). This means the copy function will copy a block of data starting at “Now is the time…”, continue until the “…come to.^Z”, and continue on in memory for 19 more characters.
What are those 19 characters? Not significant to the text editor. Probably junk in memory. The actual 64 character memory block might look like this, using an ASCII display:
“Now is the time for all good men to come to.^Z4kd @$%sle 76kek 10”
And that is what will be copied to the disk.
Now let’s read from the disk. Here’s what will be copied into working RAM:
“Now is the time for all good men to come to.^Z4kd @$%sle 76kek10”
Note the junk data that isn’t part of the original text file. Copying this doesn’t mean the OS is broken, it’s just the way things work.
The text editor will use the ^Z EOF to determine where the significant data ends. As far as the copy program is concerned, it doesn’t end there, which is why we make the distinction between binary and ASCII copying.