如题
使用C# 中 FileStream 对象操作二进制文件
大体上的代码,我目前这里没有VS环境
FileStream fs = new FileStream(filepath,FileMode.OpenOrCreate,FileAccess.ReadOrWrite);
fs.seek(0,Ogein.Begin);
fs.Write(myBytes,0,myBytes.Length);
执行完后,这一小段代码并没有抛出异常。
但是虽说myBytes的字节长度也就是70多。但是一查看文件,文件的大小是没有发生变化的。
后使用Ultra Edit 打开这个文件,发现他和源文件(写入的文件是从源文件那里复制过来的)相比,只是从头部到myBytes结尾那里进行改写操作。而不是插入操作。请问要想实现插入操作不会是要先把文件里面的内容读出来,形成一个二进制文件数组(WriteArray),然后再手动的在这个WriteArray字组的头部加入我要写的信息吧?这样如果这个二进制文件太大了,内存放不下咋办?
如何操作?请解答 谢谢
1、新建一个文件,先写入你的 myBytes ,然后从原文件每次读取4096写入到新文件中,或者用 FileStream.CopyTo。
2、将 myBytes 写入一个单独的文件,然后用 dos 的 copy 命令同原来文件合并。、
囧。。。
对了 为什么第一个每次都是4096 ? 是个经验值还是windows上有限定?
@天生俪姿: NTFS文件系统每簇的默认大小就是 4096 。但是之前好像有个测试,每次读写 512 才是性能最高的。
@Launcher:
嗯 了解 谢谢!
参考C# prepending bytes to the beginning of a file:
int numberOfBytes = 100; byte newByte = 0x1; using ( var newFile = new FileStream( @"C:\newfile.dat", FileMode.CreateNew, FileAccess.Write ) ) { for ( var i = 0; i < numberOfBytes; i++ ) { newFile.WriteByte( newByte ); } using ( var oldFile = new FileStream( @"C:\oldfile.dat", FileMode.Open, FileAccess.Read ) ) { oldFile.CopyTo(newFile); } } // Rename and delete files, or whatever you want to do
这个。。。呃~~
我直接复制了~~
3Q
嗯 不过我还是先给 1楼的吧。。 同样谢谢dudu 还有会长
没有直接Insert的办法........
嗯。 晓得了