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

short类型的数组保存成文件解决办法

2011-12-28 
short类型的数组保存成文件我有一个short:buffer[8000]我想把它保存到一个文件中不知道用哪个类我用了File

short类型的数组保存成文件
我有一个short:   buffer[8000]
我想把它保存到一个文件中
不知道用哪个类
我用了FileStream类,但这个类只能存储字节型的


[解决办法]
你可以把short拆成2个byte再保存,读的时候每2个byte拼成一个short。
也可以转成string后一行保存一个,读的时候Convert.ToInt16或者Int16.Parse。
[解决办法]
自己定义文件格式,如:
文件头用4个字节存储数组的长度,因为一个short存储点2个字节,所以文件的长度就是4字节+数组长度*2;
short[] arrShort = new short[8000];
for( int i = 0; i < arrShort.length; ++i )
{
arrShort[i] = 0;//赋值
}
FileStream fs = new FileStream( file );
byte[] arrFileLengths = BitConverter.GetBytes( arrShort.length );
fs.write( arrFileLenghts,0,arrFileLenghts.length );
for( int i = 0; i < arrShort.length; ++i )
{
arrFileLengths = BitConverter.GetBytes( arrShort[i] );
fs.write( arrFileLenghts,0,arrFileLenghts.length );
}
以上代码未经测试.
[解决办法]
//写
private void button1_Click(object sender, EventArgs e)
{
short[] buffer = new short[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
FileStream vFileStream = new FileStream(@ "c:\temp\temp.dat ",
FileMode.Create, FileAccess.Write);
byte[] temp = new byte[buffer.Length * sizeof(short)];
Buffer.BlockCopy(buffer, 0, temp, 0, temp.Length);
vFileStream.Write(temp, 0, temp.Length);
vFileStream.Close();
}

[解决办法]
用Buffer.BlockCopy复制到Byte数组
[解决办法]
//读
protected void button2_Click(object sender, EventArgs e)
{
FileStream vFileStream = new FileStream(@ "c:\temp\temp.dat ",
FileMode.Open, FileAccess.Read);
byte[] temp = new byte[vFileStream.Length];
vFileStream.Read(temp, 0, temp.Length);
short[] buffer = new short[temp.Length / sizeof(short)];
Buffer.BlockCopy(temp, 0, buffer, 0, buffer.Length * sizeof(short));
vFileStream.Close();
Text = string.Format( "{0},{1},{2} ", buffer[0], buffer[1], buffer[2]);
}

[解决办法]
要注意Buffer.BlockCopy方法的参数,无论偏移量还是个数,都是按字节算的~
[解决办法]
sizeof(short)在safe中可以编译

热点排行