这是写进的内容 private void SaveAsBxt(StringBuilder temContent)
{
string fPath = @"E:\downTest\baidu\content.bxt";
int fileCount = _SectionsGather.LocalImagesPaths.Count+1;
fileCount = 5;
FileStream fs = new FileStream(fPath, FileMode.Create,FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write("FileType:bxt");
//bw.Write((char)13);
bw.Write("Version:1.0");
//bw.Write((char)13);
bw.Write(fileCount);
bw.Write((char)13);
string txt = temContent.ToString();
byte[] btContent = Encoding.GetEncoding("GB2312").GetBytes(txt);
//写入文件长度
bw.Write((long)btContent.Length);
for (int i = 0; i < _SectionsGather.LocalImagesPaths.Count; ++i)
{
byte[] temBt = File.ReadAllBytes(_SectionsGather.LocalImagesPaths[i]);
bw.Write((long)temBt.Length);
}
//写入文件名
bw.Write("content.txt");
for (int i = 0; i < _SectionsGather.LocalImagesPaths.Count; ++i)
{
bw.Write(_SectionsGather.LocalImagesPaths[i]);
}
//写入内容
bw.Write(btContent);
for (int i = 0; i < _SectionsGather.LocalImagesPaths.Count;++i )
{
//TODO:此处改成文件名,而不是路径
bw.Write(Path.GetFileName(_SectionsGather.LocalImagesPaths[i]));
}
fs.Close();
bw.Close(); }这是读取的方法
FileStream fs = new FileStream(filePath, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
int fileCount = br.ReadInt32();
wb.DocumentText = fileCount.ToString();
return;
br.BaseStream.Position = 0;
string type = br.ReadString();
string version = br.ReadString();
string testUrl = br.ReadString();
string webContent ="version:" + version + "<br />testUrl:" + testUrl + "<br />FileCount:" + fileCount;
wb.DocumentText = webContent; fs.Close();
br.Close();
我就郁闷了,读取出的fileCount应该是5才对。但这里却是1818838540,请教是怎么回事
{
string fPath = @"E:\downTest\baidu\content.bxt";
int fileCount = _SectionsGather.LocalImagesPaths.Count+1;
fileCount = 5;
FileStream fs = new FileStream(fPath, FileMode.Create,FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs);
bw.Write("FileType:bxt");
//bw.Write((char)13);
bw.Write("Version:1.0");
//bw.Write((char)13);
bw.Write(fileCount);
bw.Write((char)13);
string txt = temContent.ToString();
byte[] btContent = Encoding.GetEncoding("GB2312").GetBytes(txt);
//写入文件长度
bw.Write((long)btContent.Length);
for (int i = 0; i < _SectionsGather.LocalImagesPaths.Count; ++i)
{
byte[] temBt = File.ReadAllBytes(_SectionsGather.LocalImagesPaths[i]);
bw.Write((long)temBt.Length);
}
//写入文件名
bw.Write("content.txt");
for (int i = 0; i < _SectionsGather.LocalImagesPaths.Count; ++i)
{
bw.Write(_SectionsGather.LocalImagesPaths[i]);
}
//写入内容
bw.Write(btContent);
for (int i = 0; i < _SectionsGather.LocalImagesPaths.Count;++i )
{
//TODO:此处改成文件名,而不是路径
bw.Write(Path.GetFileName(_SectionsGather.LocalImagesPaths[i]));
}
fs.Close();
bw.Close(); }这是读取的方法
FileStream fs = new FileStream(filePath, FileMode.Open);
BinaryReader br = new BinaryReader(fs);
int fileCount = br.ReadInt32();
wb.DocumentText = fileCount.ToString();
return;
br.BaseStream.Position = 0;
string type = br.ReadString();
string version = br.ReadString();
string testUrl = br.ReadString();
string webContent ="version:" + version + "<br />testUrl:" + testUrl + "<br />FileCount:" + fileCount;
wb.DocumentText = webContent; fs.Close();
br.Close();
我就郁闷了,读取出的fileCount应该是5才对。但这里却是1818838540,请教是怎么回事
因为在写的时候最先写的是bw.Write("FileType:bxt");
其次是bw.Write("Version:1.0");
最后才是bw.Write(fileCount); //fileCount =5
所以在读流的时候,在0位置处开始的取整形不可能是5;BinaryWriter ..::.Write 方法 (String)
将有长度前缀的字符串按 BinaryWriter 的当前编码写入此流,并根据所使用的编码和写入流的特定字符,提升流的当前位置简单说就是在写如字符串之前,先把字符串的长度写进去。
"FileType:bxt" 长度是12个 也就是十六进制0xC
然后写
F 0x46
i 0x69
l 0x6c
e 0x65
……
文件中的字符序列是0c46696c65...............在读的时候
BinaryReader br = new BinaryReader(fs);
int fileCount = br.ReadInt32();
文件0位置开始处四个字节取整型0x6c69460c (小端表示)对应十进制 1818838540
希望楼主看明白了
因为使用的是BinaryWriter 构造函数 (Stream)
用 UTF-8 作为字符串编码来初始化 BinaryWriter 类的新实例。
所以以上的推断是成立的。
不同编码可能得到的值不同,楼主可自行调试。
使用BinaryWriter 构造函数 (Stream, Encoding)