我正在尝试创建的应用程序将读取任何文件的二进制代码并使用完全相同的二进制代码创建文件,从而创建副本。
在编写一个读取文件并将其写入其他地方的程序时,我遇到了编码问题,所以我假设读取为直接二进制文件会克服这个问题。
正在读入应用程序的文件非常重要,因为在我开始工作之后,我将添加其他功能,以便在读取文件时对其进行搜索或操作。
更新: 我要感谢所有花时间回答的人,我现在有了一个有效的解决方案。 Wolfwyrd的回答正是我所需要的。
答案 0 :(得分:3)
BinaryReader将处理将文件读入字节缓冲区。 BinaryWriter将处理将这些字节转储回另一个文件。您的代码将类似于:
using (var binReader = new System.IO.BinaryReader(System.IO.File.OpenRead("PATHIN")))
using (var binWriter = new System.IO.BinaryWriter(System.IO.File.OpenWrite("PATHOUT")))
{
byte[] buffer = new byte[512];
while (binReader.Read(buffer, 0, 512) != 0)
{
binWriter.Write(buffer);
}
}
这里我们循环512字节的缓冲区并立即将其写入另一个文件。您需要为自己的缓冲区选择合理的大小(如果整个文件的大小合理,则无法停止读取整个文件)。正如您提到的那样进行模式匹配,如果不将整个文件加载到单个字节数组中,则需要考虑模式与缓冲读取重叠的情况。
This SO Question提供了有关阅读大型文件的最佳做法的详细信息。
答案 1 :(得分:1)
以特定编码将原始数据类型读取为二进制值。
也许BinaryReader.ReadBytes Method
从当前流中读取指定的字节数到a 字节数组并以当前字节数提前当前位置。
将二进制中的基元类型写入流并支持写入 特定编码中的字符串。
答案 2 :(得分:1)
查看MemoryStream和BinaryReader / BinaryWriter:
http://www.dotnetperls.com/memorystream http://msdn.microsoft.com/en-us/library/system.io.binaryreader.aspx http://msdn.microsoft.com/en-us/library/system.io.binarywriter.aspx
答案 3 :(得分:1)
char
。
using (BinaryReader writer = new BinaryWrite(File.OpenWrite("target"))
{
using (BinaryReader reader = new BinaryReader(File.OpenRead("source"))
{
var nextChar = reader.Read();
while (nextChar != -1)
{
writer.Write(Convert.ToChar(nextChar));
nextChar = reader.Read();
}
}
}
答案 4 :(得分:0)
我正在尝试创建的应用程序将读取任何文件的二进制代码并使用完全相同的二进制代码创建文件,从而创建副本。
这是出于学术目的吗?或者你真的只是想复制一个文件?
如果是后者,您只想使用System.IO.File.Copy
方法。