Problemas como este são o motivo pelo qual usamos sistemas operacionais, ele fornece uma camada de abstração para que você não precise se preocupar no nível do aplicativo sobre coisas como a forma como a memória é armazenada no nível do hardware.
As camadas são semelhantes a esta (para unidades HDD), cada camada mostra ao lado dela quem é responsável por essa camada.
File (File system)
|
v
Bitstream (OS)
|
v
Sectors (Hardware Driver)
|
V
Bits (Hard disk controller)
|
V
Magnetic flux (Hard disk controller)
Cada camada não se importa com o que as camadas acima ou abaixo dela estão fazendo, a única coisa importante é que ela expõe uma API conhecida para direcionar a camada acima dela e usa uma API conhecida na camada direta abaixo dela.
Ao escrever aplicativos quase nunca abaixo da camada Bitstream ( System.IO.Stream
) quando você grava seus dados no fluxo, ele os transfere para o driver e o driver os divide, no entanto, a próxima camada abaixo precisa deles para ser dividido (pedaços de 4k para HDDs modernos).
Para como o motorista rastreia "o que vai para onde?" isso depende da implementação do driver.
Para realmente responder à sua pergunta, Anexar trabalhos pelo seu programa solicita o Bitstream para um arquivo. Uma vez que tenha o fluxo de bits, adiciona mais dados ao final do fluxo de bits. O que o OS / Driver faz a esse fluxo de bits depois que você escreve nele é uma caixa preta (você não sabe os detalhes) e será totalmente diferente se você estiver trabalhando com um FileStream
, MemoryStream
ou uma NetworkStream
. A grande coisa sobre esta estrutura em camadas é que você não precisa se importar! A responsabilidade é a próxima camada abaixo e essa camada lida com ela.