Come si legge un array di byte non elaborato da qualsiasi file e si scrive nuovamente l'array di byte in un nuovo file?C# - Come faccio a leggere e scrivere un file binario?
risposta
(edit: notare che la domanda è cambiato, ma non ha menzionato byte[]
inizialmente; vedi revision 1)
Beh, File.Copy
salti in mente; ma per il resto questo suona come uno scenario Stream
:
using (Stream source = File.OpenRead(inPath))
using (Stream dest = File.Create(outPath)) {
byte[] buffer = new byte[2048]; // pick size
int bytesRead;
while((bytesRead = source.Read(buffer, 0, buffer.Length)) > 0) {
dest.Write(buffer, 0, bytesRead);
}
}
sai di TextReader e TextWriter, e loro discendenti StreamReader e StreamWriter? Penso che questi risolveranno il tuo problema perché gestiscono le codifiche, BinaryReader non conosce codifiche o persino testo, riguarda solo i byte.
Jeremy ha chiesto di leggere e scrivere file BINARY, vero? – pavium
Se si tratta solo di dati binari, allora perché c'è qualche problema con la codifica del char? –
byte[] data = File.ReadAllBytes(path1);
File.WriteAllBytes(path2, data);
Si noti che per file di grandi dimensioni che potrebbero essere * molto * costosi. –
Aggiunta di un aggiornato risposta,
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
source.CopyTo(dest);
}
}
è possibile specificare la dimensione del buffer
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
source.CopyTo(dest, 2048); // or something bigger.
}
}
o si potrebbe eseguire l'operazione su un altro thread,
using (var source = File.OpenRead(inPath))
{
using (var dest = File.Create(outPath))
{
await source.CopyToAsync(dest);
}
}
che sarebbe utile quando il thread principale ha a che fare altri lavori, come con WPF e le applicazioni di Windows Store.
Codifica e scrittura binaria? La codifica è una cosa "stringa". Non dovresti avere problemi quando hai a che fare con dati binari. –
Jeremy, vuoi dire "a seconda del tipo di file il * formato * varia ..."? se il codice che stai utilizzando cerca di leggere/scrivere file con il tipo/formato di file sbagliato sono sicuro che ci sarebbe corruzione. – pavium
Leggere un file come 'byte []' non è necessariamente una buona idea; questo potrebbe essere ** molto ** costoso per file di grandi dimensioni. –