我正在尝试创建的应用程序将读取任何文件的二进制代码并使用完全相同的二进制代码创建一个文件,从而创建一个副本。
在编写一个读取文件并将其写入其他地方的程序时,我遇到了编码问题,所以我假设直接读取二进制文件可以克服这个问题。
读入应用程序的文件很重要,因为在我让它工作后,我将添加额外的功能来搜索或在读取文件数据时对其进行操作。
更新:我要感谢所有花时间回答的人,我现在有一个可行的解决方案。Wolfwyrd 的回答正是我所需要的。
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 字节的缓冲区并立即将其写入另一个文件。您需要为自己的缓冲区选择合理的大小(如果大小合理,没有什么能阻止您阅读整个文件)。正如您提到的进行模式匹配,如果您不将整个文件加载到单字节数组中,您将需要考虑模式与缓冲读取重叠的情况。
这个 SO Question有更多关于阅读大文件的最佳实践的细节。
查看 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
看看使用BinaryReader 类
以特定编码将原始数据类型读取为二进制值。
从当前流中读取指定数量的字节到字节数组中,并将当前位置前进该字节数。
以二进制形式将原始类型写入流,并支持以特定编码写入字符串。
另一个很好的例子C# - 复制二进制文件
例如,一次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();
}
}
}
我正在尝试创建的应用程序将读取任何文件的二进制代码并使用完全相同的二进制代码创建一个文件,从而创建一个副本。
这是出于学术目的吗?或者你真的只是想复制一个文件?
如果是后者,您将只想使用该System.IO.File.Copy
方法。