标签: memorystream

将内存流表示为物理文件

我今天遇到了一个愚蠢的问题:

在我的项目中我必须使用一个库(我无法替换),他的问题是我正在使用MemoryStream而不是经常保存到 HDD(因为文件很多,而且它们的大小很小,所以它很完美为MemoryStream)。问题是库 API 是围绕文件系统访问构建的 - 其中一个函数只接受文件的直接路径。

我如何仍然向该方法发送一个字符串(路径),从而在FileStream不实际接触硬盘的情况下创建一个新的?

例如“\MEMORY\myfile.bin”?

c# filesystems api memorystream

5
推荐指数
1
解决办法
1665
查看次数

是否可以导出(伪造)内存中 MemoryStream 文件的位置路径?

是否可以导出内存文件的位置路径?

我这样做的理由是基于我的 WinForms 应用程序以 Base64 编码的字符串格式检索的图像集合。我需要构建一些 HTML 并注入这些图像,以便它们可以在我的应用程序的 WebBrowser 控件中的嵌入页面上呈现。由于我们在这里谈论的是 HTML,因此我需要使用<IMG>标签来显示图像。这个元素需要接受一个“src”路径,这意味着我需要确定一种方法来导出每个内存图像的绝对/相对路径。

c# file-io memorystream filestream .net-3.5

5
推荐指数
1
解决办法
955
查看次数

将内存中的二进制数据读入字符串流并通过套接字流式传输

例如,我想知道是否可以在内存中获取一段数据,将其读入输出字符串流(作为二进制数据)并将其写入套接字以供客户端应用程序处理。

我在尝试此操作时遇到的问题如下:

例子:

char name[1024] = "Test";
std::ostringstream message (std::stringstream::out | std::stringstream::binary);

len = strlen(name);
message.write(reinterpret_cast<const char*>(&len), sizeof(int));
message.write(test, len*sizeof(char));
Run Code Online (Sandbox Code Playgroud)

我想将此字符串流写入套接字,其中包含所有数据,但问题是这样的:字符串流写入仅执行第一次,在本例中写入 4(字符串的长度),并且后续写入均不执行。我在这里错过了什么吗?

如果这不是最好的方法,那么实现这一目标的最佳方法是什么?这在一定程度上是为了减少缓存内存快照的文件 I/O。

提前致谢..

c++ memorystream ostringstream

5
推荐指数
1
解决办法
6978
查看次数

是否可以从加载到 MemoryStream 的文件中获取文件扩展名或类型?

我正在 C# 中创建一个服务,该服务将由将处理和存储文件的 ASP.Net Web API 使用。

作为 Web API 的一部分,我将文件存储在MemoryStreams 中,然后将其传递给服务进行实际处理和存储。

该服务的一部分是为每个文件生成一个新的文件名。

所以这引出了我的问题,现在是否有可能找出文件的文件类型/扩展名,因为它位于 MemoryStream 中?

c# memorystream

5
推荐指数
1
解决办法
9539
查看次数

将 Azure blob 的内容作为文本字符串下载需要很长时间

我正在开发一个应用程序

  1. 使用简单的 HTTP 网页(REST 方法)从我的本地计算机上传 Azure blob 存储上的 .CSV 文件

  2. 上传 .CSV 文件后,我获取流以更新我的数据库

.CSV 文件大约 30 MB,上传到 blob 需要 2 分钟,但读取流需要 30 分钟你能提供输入来提高速度吗? 这是用于从文件中读取流的代码片段:https : //azure.microsoft.com/en-in/documentation/articles/storage-dotnet-how-to-use-blobs/

public string GetReadData(string filename)
        {
            // Retrieve storage account from connection string.
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(System.Web.Configuration.WebConfigurationManager.AppSettings["StorageConnectionString"]);

            // Create the blob client.
            CloudBlobClient blobClient = storageAccount.CreateCloudBlobClient();

            // Retrieve reference to a previously created container.
            CloudBlobContainer container = blobClient.GetContainerReference(System.Web.Configuration.WebConfigurationManager.AppSettings["BlobStorageContainerName"]);

            // Retrieve reference to a blob named "filename"
            CloudBlockBlob blockBlob2 = container.GetBlockBlobReference(filename);

            string …
Run Code Online (Sandbox Code Playgroud)

c# csv memorystream azure azure-storage-blobs

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

将流写入文件无法正常工作

我正在制作一个程序,通过 TCP 以块的形式传输文件。现在,每次我在最后传输文件时似乎都没有写入,因此如果我尝试传输右下角的图片,则会出现故障。现在,我的第一个想法是,当我读取、传输和写入小于缓冲区长度的最终块时,我也写入了很多零。所以我尝试相应地更改最后一个缓冲区大小。然后我使用一个只写有 HELLO WORLD 的小文本文件进行了尝试,但是当我输入它,然后打开文件时,它是空的。

这是读取和发送代码,其中 range[0] 是第一部分, range[1 ] 是最后一部分:

byte[] buffer = new byte[DATA_BUFF_SIZE];
using (Stream input = File.OpenRead(file.Path))
{
    Console.WriteLine("SENT PARTS # ");
    for (int i = range[0]; i <= range[1]; i++)
    {
        Console.Write("PART " + i + ", ");

        if (i == range[1])
        {
            buffer = new byte[input.Length - input.Position];
        }

        input.Position = i * DATA_BUFF_SIZE;
        input.Read(buffer, 0, buffer.Length);

        netStream.Write(buffer, 0, buffer.Length);

    }
    Console.WriteLine("LENGTH = " + input.Length);
}
Run Code Online (Sandbox Code Playgroud)

这是接收和编写代码:

int …
Run Code Online (Sandbox Code Playgroud)

c# memorystream stream

5
推荐指数
1
解决办法
627
查看次数

gzipstream 内存流到文件

我正在尝试使用 Gzip 压缩来压缩 JSON 文件以发送到另一个位置。它每天需要处理 5,000 - 10,000 个文件,我不需要本地机器上的文件的压缩版本(它们实际上被传输到 AWS S3 进行长期存档)。

由于我不需要它们,我试图压缩到内存流,然后使用它写入 AWS,而不是将每个压缩到磁盘。每当我尝试这样做时,文件都会损坏(例如,当我在 7-Zip 中打开它们并尝试打开其中的 JSON 文件时,我收到“数据错误文件已损坏”)。

当我尝试将内存流写入本地文件时会发生同样的事情,所以我现在正在尝试解决这个问题。这是代码:

string[] files = Directory.GetFiles(@"C:\JSON_Logs");

foreach(string file in files)
{
    FileInfo fileToCompress = new FileInfo(file);
    using (FileStream originalFileStream = fileToCompress.OpenRead())
    {
        using (MemoryStream compressedMemStream = new MemoryStream())
        {
            using (GZipStream compressionStream = new GZipStream(compressedMemStream, CompressionMode.Compress))
            {
                originalFileStream.CopyTo(compressionStream);
                compressedMemStream.Seek(0, SeekOrigin.Begin);
                FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz");

                //Eventually this will be the AWS transfer, but that's not important here
                compressedMemStream.WriteTo(compressedFileStream); 
            }
        }
    }      
}
Run Code Online (Sandbox Code Playgroud)

c# memorystream filestream gzipstream

5
推荐指数
1
解决办法
4581
查看次数

MemoryStream 中的 GZipStream 只返回几百字节

我正在尝试下载一个几百 MB 的 .gz 文件,并在 C# 中将其转换为一个很长的字符串。

using (var memstream = new MemoryStream(new WebClient().DownloadData(url)))
using (GZipStream gs = new GZipStream(memstream, CompressionMode.Decompress))
using (var outmemstream = new MemoryStream())
{
    gs.CopyTo(outmemstream);
    string t = Encoding.UTF8.GetString(outmemstream.ToArray());
    Console.WriteLine(t);
}
Run Code Online (Sandbox Code Playgroud)

我的测试网址:https : //commoncrawl.s3.amazonaws.com/crawl-data/CC-MAIN-2017-47/segments/1510934803848.60/wat/CC-MAIN-20171117170336-20171117190302twarc0z.

memstream 的长度为 283063949。程序在它初始化的那一行停留了大约 15 秒,在此期间我的网络被破坏了,这是有道理的。

outmemstream 的长度只有 548。

写入命令行的是压缩文档的第一行。它们不是乱码。我不知道如何得到其余的。

c# gzip memorystream

5
推荐指数
1
解决办法
1320
查看次数

Azure 中的 System.OutOfMemoryException 但不是本地的

我有以下代码,它使用名为 Aspose.Words 的第三方库:

SaveOptions saveOptions = SaveOptions.CreateSaveOptions(SaveFormat.Docx);
saveOptions.MemoryOptimization = true;
saveOptions.TempFolder = Path.GetTempPath();
var mm = new RecyclableMemoryStreamManager();
using (RecyclableMemoryStream ms = new RecyclableMemoryStream(mm))
{
    doc.Save(ms, saveOptions);
    return ms.ToArray();
}
Run Code Online (Sandbox Code Playgroud)

我在using语句中遇到以下错误。

Mvc.ExceptionHandling.AbpExceptionFilter - 引发“System.OutOfMemoryException”类型的异常。

我无法在本地重现它(在处理过程中我的内存使用量可能增加了 200mb,因此它实际上并没有使用太多内存)。文件本身大小仅为 56MB。Aspose 告诉我它最多可以使用该数量的 10 倍......即使如此也应该没问题。我已更改服务计划以扩展到 14GB 内存。

我正在使用 RecyclableMemoryStreamManager 因为我已经尝试使用 MemoryStream 但没有成功。

我还能做些什么来解决这个我只在 Azure(开发和生产)中遇到的问题?Azure API是.net核心堆栈,具有64位平台。

提前致谢。

memorystream out-of-memory azure aspose.words

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

ASP.Net Core 从 FileStreamResult 返回 500 INTERNAL SERVER ERROR

使用 MemoryStream 写入 PDF 时,ASP.Net Core 从 FileStreamResult 返回 500 服务器错误

公共异步任务<Stream> DownloadDocumentInfoAsPdfAsync(用户登录用户){
    尝试 {
        var conversionOptions = 新 ConversionOptions {
            边距 = 新的 MarginSettings(20, 5.5, 10, 5.5),
        };

        //从byte[]创建新的MemoryStream
        返回新的 MemoryStream(_htmlToPdfConverter.ConvertHtml(html, conversionOptions));
    }
}

//从上面的函数返回FileStream。
公共异步任务 <IActionResult>GenerateReport([FromRoute] string info) {
    var 结果 = wait _mediator.Send(query);
    return File(结果, "application/pdf", "employee.pdf"); //这将通过 500 INTERNAL SERVER ERROR
}

memorystream exception filestream asp.net-core

5
推荐指数
1
解决办法
3351
查看次数