No, no creo que haya nada que lo haga.
Si los dos archivos usan la misma codificación y no necesita verificar que sean válidos, puede tratarlos como archivos binarios, p.
using (Stream input = File.OpenRead("file1.txt"))
using (Stream output = new FileStream("file2.txt", FileMode.Append,
FileAccess.Write, FileShare.None))
{
input.CopyTo(output); // Using .NET 4
}
File.Delete("file1.txt");
Tenga en cuenta que si file1.txt
contiene una marca de orden de bytes, debe saltar más allá de esta primera para evitar tener que en el medio de file2.txt
.
Si usted no está utilizando .NET 4 puede escribir su propio equivalente de Stream.CopyTo
... incluso con un método de extensión para hacer la entrega sin fisuras:
public static class StreamExtensions
{
public static void CopyTo(this Stream input, Stream output)
{
if (input == null)
{
throw new ArgumentNullException("input");
}
if (output == null)
{
throw new ArgumentNullException("output");
}
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = input.Read(buffer, 0, buffer.Length)) > 0)
{
output.Write(buffer, 0, bytesRead);
}
}
}
¿Es la única manera? – CarneyCode
@Carn: ¿Es esa una respuesta vacilante? O bien ... – CODe
No puede "desvincular" bloques de un archivo y "vincularlos" a otro archivo en el nivel SO (incluso porque el punto en los archivos que desea no podría estar en el límite del bloque). Tienes que leer, escribir y luego borrar. Y si quieres hacerlo de forma transaccional ... Bueno ... ¡buena suerte! :-) Esto no es SQL :-) (técnicamente es posible con Windows más nuevo). Si solo quieres hacerlo "normalmente", se trata de 10/20 líneas de código (quizás menos) – xanatos