如何读取字节数组到FileStream
本文关键字:字节数 数组 FileStream 字节 何读取 读取 | 更新日期: 2023-09-27 18:03:10
我有一个字节数组,我想读取字节数组到一个FileStream。下面是我的代码示例:
string fileName = "test.txt";
byte[] file = File.ReadAllBytes(Server.MapPath("~/Files/" + fileName));
FileStream fs = new FileStream();
fs.ReadByte(file);
object obj = LoadFile<object>(fs);
public static T LoadFile<T>(FileStream fs)
{
using (GZipStream gzip = new GZipStream(fs, CompressionMode.Decompress))
{
BinaryFormatter bf = new BinaryFormatter();
return (T)bf.Deserialize(gzip);
}
}
在上面的方法中,我使用了FileStream来读取字节数组,但不幸的是fs。ReadByte无法读取字节数组。任何帮助,请专注于如何读取字节数组到一个FileStream使用作为方法"LoadFile"的参数。请不要直接读取文件到FileStream,因为这里的文件是从其他地方加载的,比如从数据库或其他源。
string fileName = "test.txt";
byte[] file = File.ReadAllBytes(Server.MapPath("~/Files/" + fileName));
MemoryStream memStream = new MemoryStream();
BinaryFormatter binForm = new BinaryFormatter();
memStream.Write(file, 0, file.Length);
memStream.Seek(0, SeekOrigin.Begin);
Object obj = (Object)binForm.Deserialize(memStream);
我不确定误解在哪里。FileStream表示磁盘上的文件。
如果不将字节写入磁盘,则不能"读取字节";如果不从磁盘读取,则不能从磁盘读取。也许你想要的是一个可以包含任意内容的MemoryStream。
都派生自Stream。
是啊!在做了更多的研究之后,我现在有了一个很好的解决方案。作为主题,我已经发布了"如何读取字节数组到FileStream"。我们不能读取字节数组到FileStream,它只是用来读取驱动器上的文件到字节数组。所以我对我的代码做了一点修改,现在我有一个文件可以使用FileStream读取它。我是如何创建文件的?
在这个上下文中我有一个对象。对象是你想要的任何东西!
我使用集合作为样本对象。
Collection<object> list = new Collection<object>();
//Now I will write this list to a file. fileName is what you want and be sure that folder Files is exist on server or at the root folder of your project
WriteFile(list, Server.MapPath("~/Files/" + fileName));
//The method to write object to file is here
public static void WriteFile<T>(T obj, string path)
{
FileStream serializeStream = new FileStream(path, FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(serializeStream, obj);
serializeStream.Flush();
serializeStream.Close();
}
在我将对象写入文件后,我需要一个方法将它读回object。所以我写了这个方法:
public static Collection<object> ReatFile(string fileName){
//I have to read the file which I have wrote to an byte array
byte[] file;
using (var stream = new FileStream(Server.MapPath("~/Files/" + fileName), FileMode.Open, FileAccess.Read))
{
using (var reader = new BinaryReader(stream))
{
file = reader.ReadBytes((int)stream.Length);
}
}
//And now is what I have to do with the byte array of file is to convert it back to object which I have wrote it into a file
//I am using MemoryStream to convert byte array back to the original object.
MemoryStream memStream = new MemoryStream();
BinaryFormatter binForm = new BinaryFormatter();
memStream.Write(file, 0, file.Length);
memStream.Seek(0, SeekOrigin.Begin);
Object obj = (Object)binForm.Deserialize(memStream);
Collection<object> list = (Collection<object>)obj;
return list;
}
在做了上面的一些步骤之后,我现在可以将任何类型的对象写入文件,然后将其读取回原始对象。非常感谢你对我的帮助
为什么在使用FileStream
之前先运行File.ReadAllBytes
?
string fileName = "test.txt";
using(FileStream fs = new FileStream(Server.MapPath("~/Files/" + fileName), FileMode.Open, FileAccess.Read))
{
object obj = LoadFile<object>(fs);
fs.Close();
}