日期:2014-05-19  浏览次数:20930 次

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中可以编译