Как написать содержимое одного файла в другой файл?
Мне нужно записать содержимое файла в другой файл, используя методы File.OpenRead и File.OpenWrite. Я не могу понять, как это сделать.
Как я могу изменить следующий код для работы для меня.
using (FileStream stream = File.OpenRead("C:\\file1.txt"))
using (FileStream writeStream = File.OpenWrite("D:\\file2.txt"))
{
BinaryReader reader = new BinaryReader(stream);
BinaryWriter writer = new BinaryWriter(writeStream);
writer.Write(reader.ReadBytes(stream.Length));
}
Ответы
Ответ 1
using (FileStream stream = File.OpenRead("C:\\file1.txt"))
using (FileStream writeStream = File.OpenWrite("D:\\file2.txt"))
{
BinaryReader reader = new BinaryReader(stream);
BinaryWriter writer = new BinaryWriter(writeStream);
// create a buffer to hold the bytes
byte[] buffer = new Byte[1024];
int bytesRead;
// while the read method returns bytes
// keep writing them to the output stream
while ((bytesRead =
stream.Read(buffer, 0, 1024)) > 0)
{
writeStream.Write(buffer, 0, bytesRead);
}
}
Просто удивляйся, почему бы не использовать это:
File.Copy("C:\\file1.txt", "D:\\file2.txt");
Ответ 2
Вы должны использовать File.Copy
, если вы не хотите добавлять второй файл.
Если вы хотите добавить, вы все равно можете использовать класс File.
string content = File.ReadAllText("C:\\file1.txt");
File.AppendAllText("D:\\file2.txt",content);
Ответ 3
Попробуйте что-то в этом направлении:
using (FileStream input = File.OpenRead(pathToInputFile),
output = File.OpenWrite(pathToOutputFile))
{
int read = -1;
byte[] buffer = new byte[4096];
while (read != 0)
{
read = input.Read(buffer, 0, buffer.Length);
output.Write(buffer, 0, read);
}
}
Обратите внимание, что это несколько "скелетный", и вы должны изменить его, как требуется для его применения.
Ответ 4
Нужно ли нам FileStream? Поскольку вы можете сделать это очень легко с помощью простого класса файлов, например:
using System.IO;
string FileContent = File.ReadAllText(FilePathWhoseTextYouWantToCopy);
File.WriteAllText(FilePathToWhomYouWantToPasteTheText,FileContent);
Ответ 5
using (var inputStream = File.OpenRead(@"C:\file1.txt"))
{
using (var outputStream = File.OpenWrite(@"D:\file2.txt"))
{
int bufferLength = 128;
byte[] buffer = new byte[bufferLength];
int bytesRead = 0;
do
{
bytesRead = inputStream.Read(buffer, 0, bufferLength);
outputStream.Write(buffer, 0, bytesRead);
}
while (bytesRead != 0);
}
}
Ответ 6
Используйте класс FileStream
, от System.IO
.
[ComVisibleAttribute(true)]
public class FileStream : Stream
Ответ 7
Вы проверили, читает ли читатель все данные? Эта страница MSDN содержит пример, который проверяет все данные:
byte[] verifyArray = binReader.ReadBytes(arrayLength);
if(verifyArray.Length != arrayLength)
{
Console.WriteLine("Error reading the data.");
return;
}
Другой альтернативой является то, что вы, вероятно, должны Flush
выходной буфер:
writer.Flush();
Ответ 8
Если вы не любите использовать функцию чтения/записи файла, лучше попробовать использовать функцию копирования
Easiest will be :
File.Copy(source_file_name, destination_file_name, true)
true → для перезаписывания существующего файла без "истины" он создаст новый файл. Но если файл уже существует, он будет генерировать исключение без аргумента "true".