如果我得到一个MemoryStream
我知道已经填充了一个String
,我怎么得到String
退出?
我正在将结构序列化为a MemoryStream
,我想保存并加载序列化结构.
那么,如何将MemoryStream
文件保存到文件中并将其从文件中加载回来?
我有以下代码:
MemoryStream foo(){
MemoryStream ms = new MemoryStream();
// write stuff to ms
return ms;
}
void bar(){
MemoryStream ms2 = foo();
// do stuff with ms2
return;
}
Run Code Online (Sandbox Code Playgroud)
我分配的MemoryStream是否有可能以后不能被处理掉?
我有一个同行评审坚持我手动关闭它,我找不到信息来判断他是否有一个有效点.
我正在编写一个程序来将文件附加到电子邮件中.目前我正在使用FileStream
磁盘保存文件,然后我使用
System.Net.Mail.MailMessage.Attachments.Add(
new System.Net.Mail.Attachment("file name"));
Run Code Online (Sandbox Code Playgroud)
我不想将文件存储在磁盘中,我想将文件存储在内存中,并从内存流传递给它Attachment
.
我有以下构造方法MemoryStream
从文件路径打开一个:
MemoryStream _ms;
public MyClass(string filePath)
{
byte[] docBytes = File.ReadAllBytes(filePath);
_ms = new MemoryStream();
_ms.Write(docBytes, 0, docBytes.Length);
}
Run Code Online (Sandbox Code Playgroud)
我需要更改它以接受Stream
而不是文件路径.什么是最简单/最有效的方法来MemoryStream
从Stream
对象获取?
在序列化期间,我们可以使用内存流或文件流.
这两者之间的基本区别是什么?记忆流意味着什么?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
namespace Serilization
{
class Program
{
static void Main(string[] args)
{
MemoryStream aStream = new MemoryStream();
BinaryFormatter aBinaryFormat = new BinaryFormatter();
aBinaryFormat.Serialize(aStream, person);
aStream.Close();
}
}
}
Run Code Online (Sandbox Code Playgroud) .NET MemoryStream似乎没有.Reset或.Clear方法.
我正在考虑使用以下代码来完成此任务:
ms.Seek(0, IO.SeekOrigin.Begin)
ms.SetLength(0)
Run Code Online (Sandbox Code Playgroud)
清除或重置现有.NET MemoryStream的正确方法是什么?
我不明白我在这里做错了什么.我生成了几个内存流,在调试模式下,我看到它们已经填充.但是当我尝试复制MemoryStream
到FileStream
为了保存文件时fileStream
没有填充文件并且文件长度为0bytes(空).
这是我的代码
if (file.ContentLength > 0)
{
var bytes = ImageUploader.FilestreamToBytes(file); // bytes is populated
using (var inStream = new MemoryStream(bytes)) // inStream is populated
{
using (var outStream = new MemoryStream())
{
using (var imageFactory = new ImageFactory())
{
imageFactory.Load(inStream)
.Resize(new Size(320, 0))
.Format(ImageFormat.Jpeg)
.Quality(70)
.Save(outStream);
}
// outStream is populated here
var fileName = "test.jpg";
using (var fileStream = new FileStream(Server.MapPath("~/content/u/") + fileName, FileMode.CreateNew, FileAccess.ReadWrite))
{
outStream.CopyTo(fileStream); // fileStream is not populated …
Run Code Online (Sandbox Code Playgroud) 我在使用内存流进行序列化时遇到问题.这是我的代码:
/// <summary>
/// serializes the given object into memory stream
/// </summary>
/// <param name="objectType">the object to be serialized</param>
/// <returns>The serialized object as memory stream</returns>
public static MemoryStream SerializeToStream(object objectType)
{
MemoryStream stream = new MemoryStream();
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, objectType);
return stream;
}
/// <summary>
/// deserializes as an object
/// </summary>
/// <param name="stream">the stream to deserialize</param>
/// <returns>the deserialized object</returns>
public static object DeserializeFromStream(MemoryStream stream)
{
IFormatter formatter = new BinaryFormatter();
stream.Seek(0, SeekOrigin.Begin); …
Run Code Online (Sandbox Code Playgroud) 我正在尝试将对象写入Xml字符串并获取该字符串并将其保存到数据库中.但首先我需要得到字符串......
private static readonly Encoding LocalEncoding = Encoding.UTF8;
public static string SaveToString<T> (T settings)
{
Stream stream = null;
TextWriter writer = null;
string settingsString = null;
try
{
stream = new MemoryStream();
var serializer = new XmlSerializer(typeof(T));
writer = new StreamWriter(stream, LocalEncoding);
serializer.Serialize(writer, settings);
var buffer = new byte[stream.Length];
stream.Read(buffer, 0, (int)stream.Length);
settingsString = LocalEncoding.GetString(buffer);
}
catch(Exception ex)
{
// If the action cancels we don't want to throw, just return null.
}
finally
{
if (stream != null) …
Run Code Online (Sandbox Code Playgroud) memorystream ×10
c# ×8
.net ×4
filestream ×2
stream ×2
email ×1
file ×1
file-io ×1
file-upload ×1
io ×1
memory-leaks ×1
smtp ×1
string ×1
vb.net ×1