标签: memorystream

我的代码是否正确清理了其 List<MemoryStream>?

我有一个可以处理 PDF 文件的第三方组件。每当我需要执行操作时,我都会从文档存储(数据库、SharePoint、文件系统等)检索 PDF 文档。为了使事情保持一致,我将 PDF 文档作为byte[].

这个第三方组件需要一个MemoryStream[]MemoryStream数组)作为我需要使用的主要方法之一的参数。

我正在尝试将此功能包装在我自己的组件中,以便我可以在应用程序中的多个区域中使用此功能。我基本上想出了以下内容:

public class PdfDocumentManipulator : IDisposable
{
   List<MemoryStream> pdfDocumentStreams = new List<MemoryStream>();

   public void AddFileToManipulate(byte[] pdfDocument)
   {
      using (MemoryStream stream = new MemoryStream(pdfDocument))
      {
         pdfDocumentStreams.Add(stream);
      }
   }

   public byte[] ManipulatePdfDocuments()
   {
      byte[] outputBytes = null;

      using (MemoryStream outputStream = new MemoryStream())
      {
           ThirdPartyComponent component = new ThirdPartyComponent();
           component.Manipuate(this.pdfDocumentStreams.ToArray(), outputStream);

           //move to begining
           outputStream.Seek(0, SeekOrigin.Begin);

           //convert the memory stream to a byte array
           outputBytes = outputStream.ToArray();
      } …
Run Code Online (Sandbox Code Playgroud)

c# dispose idisposable memorystream

4
推荐指数
1
解决办法
5335
查看次数

DeflateStream 复制到内存流

Tyring 压缩和解压缩,MemoryStream但似乎CopyTo不像预期的那样工作?为什么?如何解决这个问题?

public static MemoryStream Compress(MemoryStream originalStream)
{
    Console.WriteLine("Original before compressing size: {0}", originalStream.Length.ToString());
    MemoryStream compressedMemoryStream = new MemoryStream();

    using (DeflateStream deflateStream = new DeflateStream(compressedMemoryStream, CompressionMode.Compress, true))
    {
        originalStream.CopyTo(deflateStream);
    }
    Console.WriteLine("Compressed size: {0}", compressedMemoryStream.Length.ToString());
    return compressedMemoryStream;
}

public static void Decompress(MemoryStream compressedStream)
{
    Console.WriteLine("Compressed before decompressing size: {0}", compressedStream.Length.ToString());
    using (MemoryStream decompressedFileStream = new MemoryStream())
    {
         using (DeflateStream decompressionStream = new DeflateStream(compressedStream, CompressionMode.Decompress, true))
         {
              decompressionStream.CopyTo(decompressedFileStream);
         }
         Console.WriteLine("Decompressed size: {0}", decompressedFileStream.Length.ToString());
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Original before …
Run Code Online (Sandbox Code Playgroud)

c# memorystream deflate

4
推荐指数
1
解决办法
935
查看次数

.NET Core Web API 从内存流返回 Zip 文件

我正在尝试在内存中创建一个 Zip 文件,将其他一些文件添加为存档条目,并使用以下命令从我的 Web API 控制器返回它:

try {
    // Create Zip Archive in Memory
    MemoryStream memoryStream = new MemoryStream();
    ZipArchive zipArchive = new ZipArchive(memoryStream, ZipArchiveMode.Create);
    foreach(Worksheet w in worksheets) {
        string fullPath = Path.Combine(baseFolder, w.FilePathAndName);
        if(System.IO.File.Exists(fullPath)) {
            ZipArchiveEntry f = zipArchive.CreateEntry(w.FileName, CompressionLevel.Fastest);
            using(Stream entryStream = f.Open()) {
                FileStream fileStream = System.IO.File.OpenRead(fullPath);
                await fileStream.CopyToAsync(entryStream);
            }
        }
    }
    memoryStream.Seek(0, SeekOrigin.Begin);
    return File(memoryStream, "application/zip", $"Files.zip");
} catch(Exception e) {
    return StatusCode(500, "Error: Could not generate zip file");
}
Run Code Online (Sandbox Code Playgroud)

这会创建并返回一个 zip 文件,但是它是无效的。7-Zip 给了我这个错误 …

.net memorystream zipfile .net-core asp.net-core-webapi

4
推荐指数
1
解决办法
2549
查看次数

在c#中从内存流中读取的注意事项

嘿伙计们,我最近遇到了这个网页http://www.yoda.arachsys.com/csharp/readbinary.html,解释了从文件流中读取时要采取的预防措施.它的要点是以下代码并不总是有效:

// Bad code! Do not use!
FileStream fs = File.OpenRead(filename);
byte[] data = new byte[fs.Length];
fs.Read (data, 0, data.Length);
Run Code Online (Sandbox Code Playgroud)

这很危险,因为Read的第三个参数是要读取的最大字节数,您应该使用Read的返回值来检查实际读取的数量.

我的问题是,在从内存流中读取时应该采取相同的预防措施,在读取所有字节之前,在什么情况下Read可以返回?

谢谢,巴斯

c# memorystream

3
推荐指数
1
解决办法
2747
查看次数

一个大的System.IO.MemoryStream会导致我的应用程序的内存使用量急剧增加吗?

我正在构建一个允许用户从URL下载文件的库.我正在考虑的一个选项是让用户为文件指定预期的MD5校验和; 库的GetFile(string url)函数确保下载的流的校验和与用户指定的校验和匹配.

知道HttpWebResponse.GetResponseStream()返回的NetworkStream是不可寻的,我找到了一种复制流的方法,这要归功于这个问题的答案:如何在C#中读取两次Http响应流?.在我走得更远之前,我想弄清楚这种重复的记忆含义是什么; 不幸的是,Google和MSDN上的多次搜索都化为乌有.

该库对要下载的文件的大小没有限制.我的问题是,如果用户选择2GB文件,.NET 2.0中的MemoryStream实现是否足够智能,足以有效地使用PageFile和RAM,系统不会因VM崩溃而开始爬行?此外,Jon Skeet对另一个问题的评论给了我一些思考 - 他断言即使在处理了MemoryStream后,内存也不是100%免费的.我如何以及何时确保实际释放内存?它会根据系统的要求(和必要性)发布吗?

谢谢,Manoj

c# memorystream httpwebresponse

3
推荐指数
1
解决办法
3699
查看次数

创建文件并使用memorystream保存到它

如何使用内存流创建文件并写入文件?我需要使用memorystream来防止其他线程尝试访问该文件.

我试图保存到文件的数据是html.

如何才能做到这一点?

c# memorystream

3
推荐指数
1
解决办法
2万
查看次数

如何将MemoryStream转换为FileStream?

工作:

using (ZipInputStream s = new ZipInputStream(File.OpenRead(zipFile)))
{
  ZipEntry theEntry;
  while ((theEntry = s.GetNextEntry()) != null)
  {
  }
}
Run Code Online (Sandbox Code Playgroud)

不工作,记忆流

using (ZipInputStream s = new ZipInputStream(memorystream))
{
    ZipEntry theEntry;
    while ((theEntry = s.GetNextEntry()) != null)//Exception **EOF in header**
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

如何转换?

c# memorystream filestream

3
推荐指数
1
解决办法
1万
查看次数

MemoryStream来自bytes数组,具有不同类型的数据

我想创建一个包含int32,int16,单值的内存流.使用二进制文件是没用的,所以我试图创建字节数组.因为值是不同的类型,我不知道如何正确地做到这一点.所以我尝试这样做:

byte[] tab = new byte[]{2,0,0,0,3,0,3,0} - 2是int32(四个字节),另外两个是int16(两个字节)

工作正常,但是当我想添加一些单个值时,它会产生错误.我不能这样做:

byte[] tab = new byte[]{2,0,0,0,3,0,3,0,4.4f,5.6f}

我必须有正确格式的流,因为这个流将在这个方法中读取:

short[] rawData;
 float[] modulusData;
   public void rawData(Stream s)
        {

            BinaryReader br = new BinaryReader(s);

            int dataCount = br.ReadInt32();

            if (dataCount > 0)
            {
                rawData = new short[dataCount];
                for (int i = 0; i < dataCount; i++)
                    rawData[i] = br.ReadInt16();
            }
            else
                rawData = new short[0];

            dataCount = br.ReadInt32();

            if (dataCount > 0)
            {
                modulusData = new float[dataCount];
                for (int i = 0; i < dataCount; …
Run Code Online (Sandbox Code Playgroud)

c# floating-point byte memorystream

3
推荐指数
1
解决办法
4448
查看次数

使用LinqToCSV将CSV写入MemoryStream不会返回任何数据

我已经验证使用System.Text.Encoding.ASCII.GetString(ms.ToArray));了我的内存流有预期的数据.

但是,使用LinqToCSV nuget库不会生成我的csv文件.我没有抛出任何错误或异常.当我提示打开文件时,我只得到一个空文件.

这是我的行动方法

 public FileStreamResult  Export(){

        var results = _service.GetProperties().Take(3);
        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        System.IO.TextWriter  txt = new System.IO.StreamWriter(ms); 


        CsvFileDescription inputFileDescription = new CsvFileDescription{
            SeparatorChar =',',
            FirstLineHasColumnNames = true
        }
            ; 

        CsvContext csv = new CsvContext();

        csv.Write(results,txt,inputFileDescription);



        return File(ms , "application/x-excel"); 
    }
Run Code Online (Sandbox Code Playgroud)

我觉得有趣的是,如果我将返回类型更改为contentResult,并将返回方法更改为Content()并传递它,System.Text.Encoding.ASCII.GetString(ms.ToArray));我会得到一个显示我的数据的浏览器窗口.

linq memorystream asp.net-mvc-4

3
推荐指数
2
解决办法
2766
查看次数

StreamWriter不写入文件

我有一个方法,我发送文件作为附件.我使用StreamWriterMemoryStream创建附件.代码如下:

public void ComposeEmail(string from, string to, SmtpClient client)
    {
        MailMessage mm = new MailMessage(from, to, "Otrzyma?e? nowe zamówienie od "+from , "Przesy?am nowe zamówienie na sprz?t");
        mm.BodyEncoding = UTF8Encoding.UTF8;
        mm.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
        // Adding attachment:

        using (var ms = new System.IO.MemoryStream())
        {
            using (var writer = new System.IO.StreamWriter(ms))
            {
                writer.Write("Hello its my sample file");
                writer.Flush();

                System.Net.Mime.ContentType ct = new System.Net.Mime.ContentType(System.Net.Mime.MediaTypeNames.Text.Plain);
                System.Net.Mail.Attachment attach = new System.Net.Mail.Attachment(ms, ct);
                attach.ContentDisposition.FileName = "myFile.txt";

                mm.Attachments.Add(attach);
                try
                {
                    client.Send(mm);
                }
                catch …
Run Code Online (Sandbox Code Playgroud)

c# email memorystream attachment streamwriter

3
推荐指数
1
解决办法
755
查看次数