Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
TarWriter ora rileva quando più file sono collegati mediante hard link allo stesso inode. Scrive una HardLink voce per i file successivi invece di duplicare il contenuto del file.
Versione introdotta
.NET 11 Preview 3
Comportamento precedente
In precedenza, durante la creazione di un archivio tar con TarWriter, i file hard-linked allo stesso inode venivano considerati come file separati e indipendenti. Il contenuto completo del file è stato duplicato nell'archivio per ogni hard link.
using System.Formats.Tar;
using System.IO;
string filePath1 = "file1.txt";
string filePath2 = "file2.txt";
// Create two hard-linked files.
File.WriteAllText(filePath1, "Hello, world!");
File.CreateHardLink(filePath2, filePath1);
using (var stream = File.Create("archive.tar"))
using (var writer = new TarWriter(stream, TarEntryFormat.Pax, leaveOpen: false))
{
writer.WriteEntry(filePath1, "file1.txt");
writer.WriteEntry(filePath2, "file2.txt");
}
Nell'oggetto risultante archive.tar, entrambi file1.txt e file2.txt avevano voci di file separate, ognuna contenente il contenuto completo del file.
Nuovo comportamento
A partire da .NET 11, TarWriter rileva quando più file sono collegati allo stesso inode e scrive una voce di HardLink per i file successivi anziché duplicare il contenuto del file.
Usando lo stesso codice illustrato nella sezione Comportamento precedente , il risultato archive.tar contiene ora una voce di file completa per file1.txt, mentre file2.txt ha una HardLink voce di ingresso che punta a file1.txt.
Tipo di cambiamento che interrompe la compatibilità
Questa modifica è una modifica funzionale.
Motivo della modifica
Questa modifica migliora l'efficienza degli archivi tar creati dalla System.Formats.Tar libreria. Utilizzando <le voci System.Formats.Tar.TarEntryType.HardLink> per i file che condividono lo stesso inode, le dimensioni dell'archivio risultante vengono ridotte e le relazioni di collegamento rigido tra i file vengono mantenute. Questo comportamento è coerente con GNU tar e altre implementazioni tar ampiamente usate.
Azione consigliata
Se l'applicazione dipende dalla duplicazione del contenuto dei file con collegamenti fisici, è possibile ripristinare il comportamento precedente. Impostare la HardLinkMode proprietà su TarHardLinkMode.CopyContents in una nuova TarWriterOptions istanza:
using System.Formats.Tar;
using System.IO;
string filePath1 = "file1.txt";
string filePath2 = "file2.txt";
// Create two hard-linked files.
File.WriteAllText(filePath1, "Hello, world!");
File.CreateHardLink(filePath2, filePath1);
var options = new TarWriterOptions
{
HardLinkMode = TarHardLinkMode.CopyContents
};
using (var stream = File.Create("archive.tar"))
using (var writer = new TarWriter(stream, options, leaveOpen: false))
{
writer.WriteEntry(filePath1, "file1.txt");
writer.WriteEntry(filePath2, "file2.txt");
}
L'estrazione di un archivio tar contenente HardLink voci in un file system che non supporta gli hard link genera un'eccezione IOException. Usare la nuova TarExtractOptions classe per specificare se estrarre i collegamenti rigidi come collegamenti rigidi o copiarli come file separati. Ciò consente l'estrazione nei file system senza supporto di collegamento rigido.