首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

自定义缓存复制文件有关问题

2012-11-07 
自定义缓存复制文件问题C# codeSafeFileHandle fr CreateFile(soupath, GENERIC_READ, FILE_SHARE_READ,

自定义缓存复制文件问题

C# code
SafeFileHandle fr = CreateFile(soupath, GENERIC_READ, FILE_SHARE_READ, IntPtr.Zero, OPEN_EXISTING,FILE_FLAG_NO_BUFFERING, IntPtr.Zero);            SafeFileHandle fw = CreateFile(destpath, GENERIC_WRITE, FILE_SHARE_READ, IntPtr.Zero, CREATE_ALWAYS,(FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH), IntPtr.Zero);            int bufferSize =1024* 1024 * 32;            FileStream fsr = new FileStream(fr, FileAccess.Read);            FileStream fsw = new FileStream(fw, FileAccess.Write);            BinaryReader br = new BinaryReader(fsr);            BinaryWriter bw = new BinaryWriter(fsw);            byte[] buffer = new byte[bufferSize];            Int64 len = fsr.Length;            while (fsr.Position < fsr.Length)            {                int  readCount = br.Read(buffer, 0, bufferSize);                bw.Write(buffer, 0, readCount);            }            br.Close();            bw.Close();

  有一些文件不能完全复制好,大小不对。大家帮忙看一下要怎样修改

[解决办法]
狂晕,为啥要用BinaryWriter,BinaryWriter用于将基元类型写入流
FileStrea本身就是二进制读写器,是原生操作byte[]的
[解决办法]
LZ设置了FILE_FLAG_NO_BUFFERING标志表示不使用缓冲方式,由于磁盘都是以扇区为单位来访问的,在不使用系统磁盘缓冲时,必须自己确保每次读写都是整扇区的。每扇区的容量是512字节,5000不是512的整数倍。

可以先结束流,然后再使用另外方式打开,设置偏移,把最后那块写进去!

热点排行