标签: memorystream

读取包含多个文件的 MemoryStream

如果我有一个 MemoryStream,我知道我向该 MemoryStream 发送了多个文件(示例 5 个文件)。是否可以从此 MemoryStream 读取数据并逐个文件地分解?

我的直觉告诉我不,因为当我们阅读时,我们正在逐字节阅读......任何帮助和可能的片段都会很棒。我在谷歌或这里找不到任何东西:(

c# memorystream

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

使用 XmlWriter 和 GZipStream 从 MemoryStream 写入 gzip 文件

我正在尝试编写从MemoryStream. 这是我到目前为止所拥有的 -

XmlWriterSettings settings = new XmlWriterSettings();
settings.Indent = true;

MemoryStream ms = new MemoryStream();
using (XmlWriter writer = XmlWriter.Create(ms, settings))
{
    // CREATE XML
}
Run Code Online (Sandbox Code Playgroud)

然后我想获取该流,并将其保存到压缩文件中。我见过很多使用 GZipStream 的示例,但没有一个与此完全匹配。

c# memorystream gzipstream

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

通过字节数组转换发送图像,从 java 到 c#

我正在尝试将 Android 设备上的 .jpg 文件发送到我的服务器计算机。

为此,我通过 java android 应用程序将图片转换为字节数组,并将其作为参数发送到我的服务器计算机。我通过网络服务调用来完成此操作。

编辑第一个函数:

public static byte[] ImageConvertion(){

    File inputFile = new File("/storage/emulated/0/IFSpictures/icon-si_strapclamp.jpg");
    byte[] data;

    try{
        FileInputStream input = new FileInputStream(inputFile);
        ByteArrayOutputStream output = new ByteArrayOutputStream ();

        byte[] buffer = new byte[65535];

        int l;

        while ((l = input.read(buffer)) > 0)
            output.write (buffer, 0, l);

        input.close();
        output.close();

        data = output.toByteArray();
        return data;


    } catch (IOException e) {
        System.err.println(e);
        data=null;
    }
    return data;

}
Run Code Online (Sandbox Code Playgroud)

我的网络服务是用 ASP.NET (C#) 语言编写的,并且有一个函数将字节数组作为参数并将其转换回服务器计算机上的图像。

[WebMethod]
public void ByteArrayToPicture(byte[] imageData)
{
    using (var …
Run Code Online (Sandbox Code Playgroud)

c# asp.net arrays android memorystream

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

如何将流转换为内存流

在我的代码中尝试:

预期数据

串流内容

engine.SetDocument((MemoryStream)content); //No work
Run Code Online (Sandbox Code Playgroud)

或者

var a = new MemoryStream();
engine.SetDocument(content.CopyTo(a)); //Error 
Run Code Online (Sandbox Code Playgroud)

c# memorystream stream

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

作为参数传递时,MemoryStream 不可读

昨天我遇到了一个奇怪的问题:当我想传递一个 zip 文件并byte[]读取它时,我得到了一个Ionic.Zip.ZipExpception

无法将其读取为 ZipFile

public string Import(byte[] file)
{
    try
    {
        var stream = new MemoryStream(file);
        if (ZipFile.IsZipFile(stream))
        {
            ImportArchive(stream);
        } else {
            ...
        }
    ...
}

private void ImportArchive(MemoryStream stream)
{
    var zip = ZipFile.Read(stream); //--> ZipException thrown
    ...
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我传递byte[]as 参数而不是MemoryStream,一切正常:

public string Import(byte[] file)
{
    try
    {                
        if (ZipFile.IsZipFile(new MemoryStream(file), true))
        {
            ImportArchive(file);
        } else {
            ...
        }
    ...
}

private void ImportArchive(byte[] file)
{
    var fileStream = new …
Run Code Online (Sandbox Code Playgroud)

c# memorystream dotnetzip

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

在vb.net中将base64解码为图像

我一直在互联网上搜索,但没有找到答案。你想告诉我,如何解码base64Image折线图吗?我一直在尝试先从数组转换base64Byte数组,然后从Byte数组转换为Image.

Private Function convertbytetoimage(ByVal BA As Byte())
     Dim ms As MemoryStream = New MemoryStream(BA)
     image = Image.FromStream(ms) 'I always get wrong in this line.
     Return image
 End Function
Run Code Online (Sandbox Code Playgroud)

vb.net arrays memorystream linegraph image

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

为什么这个简单的 MemoryStream.Write() 实验失败了?

System.IO.MemoryStream我对使用基于字节数组的可写性给出 ArgumentException 的基本实验感到困惑

  1. 该数组newBytes用文字初始化
  2. 内存流ms使用数组进行初始化,并将可写标志设置为True
  3. 内存流在位置1写入一个字节

VB网

Try
    Dim newBytes() As Byte = {0, 128, 255, 128, 0}
    Dim ms As New System.IO.MemoryStream(newBytes, True)
    ms.Write({CByte(4)}, 1, 1)
Catch ex as Exception
End Try
Run Code Online (Sandbox Code Playgroud)

C#.net

try
    byte() newBytes = {0, 128, 255, 128, 0};
    System.IO.MemoryStream ms = new System.IO.MemoryStream(newBytes, true);
    ms.Write(byte(4), 1, 1);
catch Exception ex
end try
Run Code Online (Sandbox Code Playgroud)

异常是ArgumentException带有文本“偏移量和长度超出数组范围或计数大于从索引到源集合末尾的元素数”。

显然内存流有Length: 5并且在位置1写入一个字节应该是完全可行的,为什么会有例外?

.net memorystream

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

从 C# .NetCore API 返回 FileStreamResult 时无法访问关闭的 Stream

C# .Net-Core 3.1

在我的 C# api 中,我在 FileStreamResult 中返回一个 pdf 文件,效果很好。

一般来说,我将流包装在 using 中,但是此代码失败并显示 Cannot access a closed Stream.

using (MemoryStream stream = new MemoryStream(byteArray))
{
    fileStreamResult = new FileStreamResult(stream, "application/pdf");
}
return (ActionResult)fileStreamResult;
Run Code Online (Sandbox Code Playgroud)

所以我需要这样做:

var stream = new MemoryStream(byteArray);
fileStreamResult = new FileStreamResult(stream, "application/pdf");
return (ActionResult)fileStreamResult;
Run Code Online (Sandbox Code Playgroud)

我假设流需要保持打开状态,我应该担心内存泄漏还是 IIS 会关闭流吗?有更好的选择吗?

c# memorystream using filestreamresult .net-core

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

在内存中创建文本文件,然后将其上传到 Azure Blob 存储

现在,我正在库的帮助下在内存中创建一个 Parquet 文件,并将其上传到Azure Blob storage. 不过,这次我想要更简单的东西,即只是将一个文本文件写入DateTime.UtcNow内存中的文本文件并将其上传到 Azure。

到目前为止我的代码:

BlobServiceClient BlobServiceClient = new BlobServiceClient("my_code");
var containerClient = BlobServiceClient.GetBlobContainerClient("my_container");
var blobClient = containerClient.GetBlockBlobClient($"path/to/specific/directory/file.parquet");

using (var outStream = await blobClient.OpenWriteAsync(true).ConfigureAwait(false))
using (ChoParquetWriter parser = new ChoParquetWriter(outStream))
{
   parser.Write(data_list);
}
Run Code Online (Sandbox Code Playgroud)

ChoParquetWriter如果没有我正在使用的库的一部分,如何在内存中创建文本文件?

更新:找到解决方案

using (var outStream = await blobClient4.OpenWriteAsync(true).ConfigureAwait(false))
            { 
                byte[] bytes = null;
                using (var ms = new MemoryStream())
                {
                    TextWriter tw = new StreamWriter(ms);
                    tw.Write(RequestTime.ToString());
                    tw.Flush();
                    ms.Position = 0;
                    bytes = ms.ToArray();
                    ms.WriteTo(outStream);
                }
            }
Run Code Online (Sandbox Code Playgroud)

有没有更简单的方法?如果不是,没关系

c# memorystream azure azure-blob-storage

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

SkiaSharp SKBitmap.Decode() 值不能为空。(参数“缓冲区”)

我正在尝试从 Blazor InputFile 组件上传多个图像:

<InputFile OnChange="@LoadFiles" multiple accept=".png, .jpg, .jpeg, .gif" />
Run Code Online (Sandbox Code Playgroud)

一旦进入内存,我需要使用 SkiaSharp 将它们的大小调整为最大宽/高 1000 像素。我为此创建了一个辅助方法,但它似乎在任何超过大约 4MB 的图像上失败。我通过搜索以及任何可用的(相当缺乏的)Microsoft 文档将以下逻辑拼凑在一起,因此我的方法可能完全错误:

using SkiaSharp;

public static byte[] Resize(byte[] fileContents, int maxWidth, int maxHeight)
{
    using MemoryStream ms = new(fileContents);
    using SKBitmap sourceBitmap = SKBitmap.Decode(ms); // <-- EXCEPTION HERE ON LARGER FILES
                        
    int height = Math.Min(maxHeight, sourceBitmap.Height);
    int width = Math.Min(maxWidth, sourceBitmap.Width);
    var quality = SKFilterQuality.High;

    using SKBitmap scaledBitmap = sourceBitmap.Resize(new SKImageInfo(width, height), quality);
    using SKImage scaledImage = SKImage.FromBitmap(scaledBitmap);
    using SKData data = …
Run Code Online (Sandbox Code Playgroud)

c# memorystream skiasharp blazor-server-side .net-6.0

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