Eu entendo que às vezes, ao copiar um arquivo, o sistema irá 'armazenar em cache' o processo de cópia ou 'atrasar' o processo: ou seja, leva um pouco mais de tempo para o processo de cópia ser realmente concluído do que uma interface de usuário de 'processo concluído' - notificação levaria você a acreditar. É por isso que não é bom remover imediatamente os discos rígidos externos imediatamente após copiá-los, mas esperar um pouco antes de fazer isso.
Então, agora digamos que eu copie um arquivo para outra pasta dentro do mesmo Drive ou para um Drive completamente diferente. Agora, movo imediatamente esse arquivo de origem para outra pasta, ou então excluo-o (movo-o para a lixeira); isso colocaria em risco o arquivo de origem ou sua cópia recém-criada, no que diz respeito à corrupção de arquivos? Ou melhor, o computador possui um sistema para se proteger contra essa eventualidade, impedindo automaticamente qualquer movimentação ou exclusão real do arquivo de origem antes que a cópia seja totalmente concluída?
Essa é uma distinção um tanto importante, porque unidades diferentes significam sistemas de arquivos diferentes, provavelmente com semântica de armazenamento, comportamento de cache, etc. diferentes. Portanto, vamos manter as coisas mais fáceis e permanecer no mesmo sistema de arquivos.
Como seu foco é o Windows, a resposta é sim. O Windows implementa uma abordagem em que os aplicativos que fazem algo com arquivos bloqueiam exclusivamente esses arquivos por padrão, para que nenhum outro aplicativo possa acessá-los. O primeiro aplicativo a fazer algo com um arquivo precisa decidir o que outros aplicativos podem fazer, ler, escrever, excluir, etc. Sem essa decisão explícita, outros aplicativos não podem fazer nada, incluindo mover um arquivo durante, por exemplo, um processo de cópia. Lembre-se de que o processo de cópia é um aplicativo, tentando mover o arquivo ao mesmo tempo, outro etc. Para obter detalhes, dê uma olhada em CreateFileW e seu argumento
dwShareMode
.Portanto, embora exista uma rede de segurança disponível, ela provavelmente não é necessária: o cache do sistema de arquivos é tratado (principalmente) de forma transparente pelos sistemas operacionais e de arquivos de qualquer maneira. O objetivo geral é que usuários e aplicativos não precisem lidar com detalhes, o que inclui coisas como copiar e saber quando os dados são realmente copiados para operação posterior. Os aplicativos podem estar interessados em tais detalhes e, por exemplo, podem usar comandos de liberação, que informam ao sistema operacional ou de arquivos que eles gravam o cache nos dados de algum arquivo agora e o aplicativo chamador aguarda até que isso termine. Mas na maioria dos casos isso não é necessário.
Isso inclui a movimentação após a cópia: Se apenas o cache do sistema de arquivos estiver envolvido e não, por exemplo, o arquivo ainda estiver bloqueado pelo próprio processo de cópia, por exemplo, o Windows Explorer, você poderá mover o arquivo mesmo que nem todos os dados estejam gravados no disco ainda . Isso ocorre porque a maioria dos sistemas de arquivos não associa diretamente os dados reais dos arquivos aos seus nomes ou caminhos de arquivos, mas trata ambos de forma independente. Assim, os dados são armazenados em algum lugar, em um local diferente, um nome de arquivo é armazenado fazendo referência ao caminho pai e também aos dados. Portanto, quando o próprio nome do arquivo é alterado ou movido para algum outro diretório, ele simplesmente mantém as referências aos dados reais e o sistema operacional e o sistema de arquivos podem, ao mesmo tempo, continuar a liberar seus caches para o local ao qual já estão associados. o nome do arquivo.
https://en.wikipedia.org/wiki/Inode
Os sistemas de arquivos modernos nem precisam se preocupar ou saber de antemão quantos dados precisam ser gravados, eles estão apenas alocando blocos de dados em algum lugar seguindo certas regras e associando cada bloco alocado ao objeto de nome de arquivo já existente.
https://en.wikipedia.org/wiki/Extent_(file_systems)
Nenhuma das acima. O processo de cópia de arquivo não depende do original neste momento; ele já leu todo o arquivo original e "escreveu" todos os dados no novo arquivo, portanto, a notificação da interface do usuário de 'processo concluído' está dizendo a verdade.
O que realmente está sendo armazenado em cache (bufferizado) são apenas as operações de gravação – há uma camada de cache completamente separada que não tem nada a ver com cópia, mas sim com gravação em disco em geral. Qualquer gravação de arquivo, seja copiando de um arquivo para outro ou apenas salvando um documento, é primeiro armazenada em buffer na memória pelo sistema operacional e só depois liberada para o armazenamento físico. (Ou seja, os dados já estão "no" arquivo até onde os programas os veem, mas ainda não estão no arquivo no disco .)
Há uma pequena diferença entre mover-se dentro do mesmo sistema de arquivos (partição) ou entre sistemas de arquivos diferentes.
Para mover dentro do mesmo sistema de arquivos : Os dados do arquivo no disco são totalmente separados de seus metadados dentro da tabela de arquivos. Os metadados incluem um ponteiro para os dados, mas são independentes deles, no sentido de que a entrada do arquivo pode ser movida para outra pasta sem mover os dados.
No seu caso, o que pode acontecer é que os dados do arquivo ainda não tenham terminado de ser movidos e ainda estejam dentro do cache, enquanto a entrada do arquivo é movida para outro lugar dentro do mesmo sistema de arquivos. Nenhum problema foi encontrado e os dados do arquivo continuarão a ser liberados do cache, enquanto o arquivo já estiver localizado em sua nova pasta (inclusive quando esta for a Lixeira).
Para mover dentro de diferentes sistemas de arquivos : o Windows tentará copiar os dados do arquivo para o novo disco, criar e inserir a nova tabela de arquivos e, finalmente, excluir o arquivo no disco de origem.
Ao copiar os dados, cada bloco de origem será lido e copiado. Os dados de origem podem ser lidos do cache de memória, se ainda não tiverem sido gravados em seu lugar no disco de origem, e depois copiados para o novo disco. É bem possível, por exemplo, que os mesmos dados sejam encontrados duplicados duas vezes no cache, onde cada cópia é destinada a ser gravada em um disco diferente.
Quando a operação de cópia for concluída no Windows, mesmo que nem todos os blocos tenham sido gravados em ambos os discos, o arquivo de origem será excluído. Isso invalidará todos os seus blocos no cache de memória, de modo que os blocos não gravados no arquivo de origem serão simplesmente cancelados. Nesse caso, pode acontecer que excluir ou mover um arquivo imediatamente depois seja, no final, mais eficiente no disco do que esperar que a gravação termine antes de realizar a operação.
Para excluir imediatamente após a cópia : conforme descrito acima, isso cancelará todos os blocos não gravados que ainda estão presentes no cache da memória, portanto, tais blocos nunca serão gravados no disco.