我将尝试使用带有106个图像(675MB)的DotNetZip-Libary创建一个zip文件,其代码如下:
Public Function GetZip() As Byte()
Dim zip As New Ionic.Zip.ZipFile(String.Format("{0}.zip", Me.GallerySystemName))
AddHandler zip.SaveProgress, AddressOf SaveProgress
For Each img In Me.Images
zip.AddFile(img.OriginalFile.FullName, "")
Next
Dim bytZip As Byte()
Using ms As New MemoryStream
zip.Save(ms)
bytZip = ms.ToArray
End Using
Return bytZip
End Function
Run Code Online (Sandbox Code Playgroud)
当我运行这段代码时,执行会停止在图像40(有时更早)没有任何执行.什么都没发生.我试图将zip直接保存到文件中.有用.
有任何想法吗?
一月
是否可以直接从MemoryStream反对写入磁盘打开文件并进行操作Process.Start()?特别是pdf文件?如果没有,我想我需要写入MemoryStream磁盘(这有点烦人).有人可以指向我有关如何写入MemoryStream磁盘的资源吗?
我正在尝试将流写入ram而不是文件.我试过这样做:
Stream stream = new MemoryStream();
BinaryFormatter bFormatter = new BinaryFormatter();
bFormatter.Serialize(stream, objectToSerialize);
stream.Close();
return stream;
Run Code Online (Sandbox Code Playgroud)
但是当我在写完它之后查看流时,它会说"Length ='stream.Length'抛出了'System.ObjectDisposedException'类型的异常"
是否可以将文件列表保存到一个MemoryStream中,然后将文件保存回光盘?
好吧,这让我疯了,哈哈.
我有一个Base64字符串,我正在尝试使用TIdDecoderMIME将其解码为TMemoryStream.
我目前的代码如下:
Var MStream:TMemoryStream; Decoder:TIdDecoderMIME;
begin
Decoder := TIdDecoderMIME.Create(nil);
MStream := TMemoryStream.Create;
Decoder.DecodeToStream(BSting,MStream);
end;
Run Code Online (Sandbox Code Playgroud)
其中BString = My Base64字符串.
现在,当代码运行时,我收到一条错误消息"DecodeToString中的大小不均匀".
有任何想法吗?
任何帮助是极大的赞赏.谢谢.
想知道以下情况是否会导致任何内存泄漏.
Aspx页面包含以下内容.
private void Generator(input)
{
using (MemoryStream memoryStream = Helper.Instance.Generate(input))
{
}
}
Run Code Online (Sandbox Code Playgroud)
从返回内存流的aspx页面调用下面的方法.
MemoryStream Generate(input)
{
MemoryStream stream = new MemoryStream();
//doing some stream manipulation here
return stream;
}
Run Code Online (Sandbox Code Playgroud) 我为用户编写了一个动作,用于下载生成的xml,而不必将其写入服务器磁盘,但将其保存到内存中.
这是我的代码:
public FileContentResult MyAction()
{
MemoryStream myStream = new MemoryStream();
XDocument xml = GenerateXml(...);
xml.Save(myStream );
myStream .Position = 0;
return File(myStream.GetBuffer(), "text/xml", "myFile.xml");
}
Run Code Online (Sandbox Code Playgroud)
一切似乎工作正常,XML是正确的,我可以下载文件,但我不明白为什么我的文件末尾有691920"nul"caracters(这些caracters的数量似乎与长度有关)的xml):

它们来自哪里?我怎么能摆脱它们?
[更新]我试过这个:
public FileContentResult MyAction()
{
XDocument xml = GenerateXml(...);
byte[] bytes = new byte[xml.ToString().Length * sizeof(char)];
Buffer.BlockCopy(xml.ToString().ToCharArray(), 0, bytes, 0, bytes.Length);
return File(bytes, "text/xml", "myFile.xml");
}
Run Code Online (Sandbox Code Playgroud)
我没有得到"nul"角色.所以我想这是MemoryStream在文件末尾添加额外的caracters.所以在我的例子中,第二个代码解决了我的问题.
但我也生成了一个我无法阅读的Word文档(由于内容存在问题,因此无法打开xxx.docx).我想我在这里遇到同样的问题,内存流在文件末尾添加额外的caracters并破坏它.
我想下载一个.json,我已经储存在容器中的BLOB Azure Storage用Newtonsoft.Json它写的一个对象.
我这样做是通过调用:
(CloudBlockBlob) blob.DownloadToStream(stream);
Run Code Online (Sandbox Code Playgroud)
然而,而不是在本地的应用程序目录中的数据流写入文件,我希望返回JSON object做Json(result)
这是我尝试过的:
using (var stream = new MemoryStream())
{
blob.DownloadToStream(stream);
var serializer = new JsonSerializer();
using (var sr = new StreamReader(stream))
{
using (var jsonTextReader = new JsonTextReader(sr))
{
result = serializer.Deserialize(jsonTextReader);
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后我的jsonTextReader变量是空的和对象null
我该怎么做才能做到这一点?
谢谢
我正在按照教程使用Google Protocol Buffers for C#.我没有看到将对象转换为字节数组的示例 - 有谁知道如何做到这一点?我使用protoc编译器自动生成了一个FilePath类,到目前为止:
FilePath fp = new FilePath
{
Path = "TestPath",
RealTimeMultiple = 5.0f
};
Run Code Online (Sandbox Code Playgroud)
所以,我需要知道如何在不使用BinaryFormatter的情况下正确序列化fp对象.