标签: memorystream

在浏览器中流式传输Pdf时如何设置文件名?

不确定如何说出这个问题...欢迎编辑!无论如何......这里去了.

我目前使用Crystal Reports生成Pdfs并将输出流式传输给用户.我的代码如下所示:

System.IO.MemoryStream stream = new System.IO.MemoryStream();

stream = (System.IO.MemoryStream)this.Report.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);

this.Response.Clear();
this.Response.Buffer = true;
this.Response.ContentType = "application/pdf";
this.Response.BinaryWrite(stream.ToArray());
this.Response.End();
Run Code Online (Sandbox Code Playgroud)

运行此代码后,它将Pdf流式传输到浏览器,打开Acrobat Reader.效果很好!

我的问题是当用户尝试将文件保存为实际文件名时...在这种情况下,它默认为CrystalReportPage.pdf.无论如何我可以设置这个吗?如果是这样,怎么样?

任何帮助,将不胜感激.

.net c# pdf streaming memorystream

9
推荐指数
2
解决办法
8020
查看次数

MemoryStream在返回时禁用读取

在我的程序中,我基本上是在读取文件,对其进行一些处理,然后将其作为内存流传递回主程序,这将由流读取器处理.这将全部由我的主要旁边的班级处理.

问题是,当我从另一个类中的my方法返回内存流时,"canread"变量设置为false,从而导致streamreader初始化失败.

下面是一个问题发生的例子(虽然在这里我写的是另一个类中的内存流,但是当我传回它时仍然会导致相同的错误.

在名为"Otherclass"的类中:

public static MemoryStream ImportantStreamManipulator()
{
   MemoryStream MemStream = new MemoryStream();

   StreamWriter writer = new StreamWriter(MemStream);
   using (writer)
   {
       //Code that writes stuff to the memorystream via streamwriter

       return MemStream;
   }
}
Run Code Online (Sandbox Code Playgroud)

函数调用主程序:

MemoryStream MStream = Otherclass.ImportantStreamManipulator();
StreamReader reader = new StreamReader(MStream);
Run Code Online (Sandbox Code Playgroud)

当我在"返回MemStream"上放置一个断点时,"CanRead"属性仍然设置为true.一旦我执行它返回到我的main函数,并将返回的值写入MStream,"CanRead"属性设置为false.然后,这会在StreamReader中导致异常,表示无法读取MStream(如指示的属性).数据应该在流缓冲区中,但我无法理解它.

如何设置它以便"CanRead"在返回主体后报告为真?或者我误解了MemoryStream的工作方式以及如何完成我想做的事情?

c# memorystream stream

9
推荐指数
1
解决办法
8644
查看次数

使用时为什么会出现内存不足错误?

我有以下方法,将a转换BitmapImageSystem.Drawing.Bitmap:

public static Bitmap BitmapImageToBitmap(BitmapImage bitmapImage)
{
    Bitmap bitmap;

    using (var ms = new MemoryStream())
    {
        var encoder = new JpegBitmapEncoder();
        encoder.Frames.Add(BitmapFrame.Create(bitmapImage));
        encoder.Save(ms);

        bitmap = new Bitmap(ms);
    }

    return bitmap;
}
Run Code Online (Sandbox Code Playgroud)

每当我尝试使用返回的Bitmap对象时,我都会收到以下错误:

发生OutOfMemoryException - 内存不足.

但是,每当我用这个替换代码时:

public static Bitmap BitmapImageToBitmap(BitmapImage bitmapImage)
{
    var ms = new MemoryStream();

    var encoder = new JpegBitmapEncoder();
    encoder.Frames.Add(BitmapFrame.Create(bitmapImage));

    encoder.Save(ms);

    return new Bitmap(ms);
}
Run Code Online (Sandbox Code Playgroud)

这很好用.不过,我敢肯定,我应该用作为MemoryStream对象实现IDisposable.这里发生了什么?

c# memorystream using

9
推荐指数
1
解决办法
2115
查看次数

来自MemoryStream UTF8编码的StreamReader

我想在MemoryStream中打开一个XML文件(来自zip存档),并在此流中创建一个StreamReader,将其放入GridView中.

我用这个代码:

MemoryStream ms = new MemoryStream();
entry.Extract(ms);
StreamReader reader = new StreamReader(ms);
DataSet ds = new DataSet();
ds.ReadXml(reader);
dataGridView1.DataSource = GlobalDs.Tables[0];
Run Code Online (Sandbox Code Playgroud)

如果我的XML文件是用ANSI编码的,那么它可以很好地工作.但是当我加载以UTF8编码的文件时,它会失败,即使我初始化StreamReader如下:

StreamReader reader = new StreamReader(ms, System.Text.Encoding.UTF8);
Run Code Online (Sandbox Code Playgroud)

我希望有人有想法解决我的问题.

c# memorystream streamreader

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

我应该如何将ZipArchive与内存流一起使用?

我的问题是,一旦ZipArchive处理完毕,它就会自动关闭并处理掉MemoryStream.如果我在处理ZipArchive信息之前看一下流不完整的拉链.

using (var compressStream = new MemoryStream())
{
    using (var zipArchive = new ZipArchive(compressStream, ZipArchiveMode.Create))
    {
        // Adding a couple of entries
        string navStackInfo = Navigation.NavState.CurrentStackInfoLines();
        var navStackEntry = zipArchive.CreateEntry("NavStack.txt", CompressionLevel.NoCompression);
        using (StreamWriter writer = new StreamWriter(navStackEntry.Open()))
        {
             writer.Write(navStackInfo);
        }
        var debugInfoEntry = zipArchive.CreateEntry("CallStack.txt", CompressionLevel.Optimal);
        using (StreamWriter writer = new StreamWriter(debugInfoEntry.Open()))
        {
            // debugInfo.Details is a string too
            writer.Write(debugInfo.Details);
        }
        // ...
        // compressStream here is not well formed
    }
    // compressStream here is …
Run Code Online (Sandbox Code Playgroud)

c# memorystream ziparchive

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

Stream.CopyTo不复制任何流数据

我遇到了将数据从a复制MemoryStreamStream内部的问题ZipArchive.以下不起作用 - 它只返回114个字节:

GetDataAsByteArray(IDataSource dataSource)
{
    using (var zipStream = new MemoryStream())
    {
        using (var archive = new ZipArchive(zipStream, ZipArchiveMode.Create, true))
        {
            var file = archive.CreateEntry("compressed.file");
            using (var targetStream = file.Open())
            {
                using (var sourceStream = new MemoryStream())
                {
                    await dataSource.LoadIntoStream(sourceStream);
                    sourceStream.CopyTo(targetStream);
                }
            }
        }
        var result = zipStream.ToArray();
        zipStream.Close();
        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,使用下面的实现"copy"-process,所有1103个字节都写入数组/内存流:

await targetStream.WriteAsync(sourceStream.ToArray(), 0, (int) sourceStream.Length);
Run Code Online (Sandbox Code Playgroud)

我想知道为什么CopyTo产量减去字节数.另外,我Int32对第二个实现中的强制转换感到不安全.

仅供参考:比较字节数组:看起来只有zip文件的页眉和页脚是由第一个实现编写的.

c# zip memorystream stream

9
推荐指数
2
解决办法
8524
查看次数

MemoryStream.WriteTo(Stream destinationStream)与Stream.CopyTo(Stream destinationStream)

哪一个更好:MemoryStream.WriteTo(Stream destinationStream)或者Stream.CopyTo(Stream destinationStream)??

我正在谈论没有Buffer的这两种方法的比较,因为我这样做:

Stream str = File.Open("SomeFile.file");
MemoryStream mstr = new MemoryStream(File.ReadAllBytes("SomeFile.file"));

using(var Ms = File.Create("NewFile.file", 8 * 1024))
{
    str.CopyTo(Ms) or mstr.WriteTo(Ms);// Which one will be better??
}
Run Code Online (Sandbox Code Playgroud)

更新

这是我想要做的:

  • 打开文件[说"X"类型文件]
  • 解析内容
  • 从这里我得到一堆新的流[3~4个文件]
  • 解析一个流
  • 提取成千上万的文件[流是图像文件]
  • 将其他流保存到文件
  • 编辑所有文件
  • 生成一个新的"X"类型文件.

我写了一些实际工作正常的代码.

但是现在我正在优化代码以提高效率.

.net c# memorystream stream

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

XML编写器和内存流c#

我正在使用XmlWriter创建一个文件,XmlWriter writer = XmlWriter.Create(fileName);它正在创建一个文件然后我还有一个我正在调用的函数, private void EncryptFile(string inputFile, string outputFile)它需要2个字符串输入和outpulfile,最后我有两个文件,一个是加密的,一个不是.我只想要一个加密文件,但是我的加密函数需要输入由XmlWriter创建的inputfile.有没有什么办法可以创建内存流并将其传递给我的函数而不是创建一个输入文件.我的加密功能

private void EncryptFile (string inputFile, string outputFile)
            string password = @"fdds"; // Your Key Here
            UnicodeEncoding UE = new UnicodeEncoding();

            byte[] key = UE.GetBytes(password);
            string cryptFile = outputFile;
            FileStream fsCrypt = new FileStream(cryptFile, FileMode.Create);

            RijndaelManaged RMCrypto = new RijndaelManaged();


            CryptoStream cs = new CryptoStream(fsCrypt,RMCrypto.CreateEncryptor(key,key),CryptoStreamMode.Write);

            FileStream fsIn = new FileStream(inputFile, FileMode.Open);

            int data;
            while ((data = fsIn.ReadByte()) != -1)
                cs.WriteByte((byte)data);
            cs.FlushFinalBlock();
            fsIn.Close();
            cs.Close();
            fsCrypt.Close();
        }
    }      
Run Code Online (Sandbox Code Playgroud)

c# xmlwriter memorystream

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

谁拥有放在剪贴板上的MemoryStream对象?(或者应该使用除MemoryStream之外的东西?)

我有这样的方法:

public DataObject GetClipboardData()
{
    var result = new DataObject();
    result.SetText(this.fallbackText.ToString());
    result.SetData(DataFormats.Html, this.GenerateHtml(), false);
    return result;
}
Run Code Online (Sandbox Code Playgroud)

哪里GenerateHtml返回一个MemoryStream.

我是否需要担心关闭MemoryStream物体?或者我应该使用其他类型的对象将原始字节放在剪贴板上?

(我试过,byte[]但这会将文字"System.Byte[]"或类似文字放在剪贴板上)

c# wpf clipboard memorystream

8
推荐指数
1
解决办法
699
查看次数

C#将System.Drawing.Image附加到电子邮件

有没有办法将System.Drawing.Image附加到电子邮件而不保存它,然后从保存的路径中抓取它.

现在我正在创建图像并保存它.然后我发送电子邮件:

MailMessage mail = new MailMessage();
                string _body = "body"

                mail.Body = _body;
                string _attacmentPath;
                if (iP.Contains(":"))
                    _attacmentPath = (@"path1");//, System.Net.Mime.MediaTypeNames.Application.Octet));
                else
                    _attacmentPath = @"path2");
                mail.Attachments.Add(new Attachment(_attacmentPath, System.Net.Mime.MediaTypeNames.Application.Octet));
                mail.To.Add(_imageInfo.VendorEmail);
                mail.Subject = "Rouses' PO # " + _imageInfo.PONumber.Trim();
                mail.From = _imageInfo.VendorNum == 691 ? new MailAddress("email", "") : new MailAddress("email", "");
                SmtpClient server = null;
                mail.IsBodyHtml = true;
                mail.Priority = MailPriority.Normal; 
                server = new SmtpClient("server");
                try
                {

                    server.Send(mail);
                }
                catch
                {

                }
Run Code Online (Sandbox Code Playgroud)

无论如何直接将System.Drawing.Image传递给mail.Attachments.Add()?

c# email memorystream image email-attachments

8
推荐指数
2
解决办法
4461
查看次数