Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我的流不断抛出读/写超时异常_C#_Stream_Openxml_Openxml Sdk - Fatal编程技术网

C# 我的流不断抛出读/写超时异常

C# 我的流不断抛出读/写超时异常,c#,stream,openxml,openxml-sdk,C#,Stream,Openxml,Openxml Sdk,我正在使用OpenOfficeSDK 2.0分析PowerPoint演示文稿。在程序的某一点上,我将一个流传递给一个方法,该方法将返回图像的MD5。然而,流中似乎有一个问题,甚至在我的MD5方法出现之前 这是我的密码: // Get image information here. var blipRelId = blip.Embed; var imagePart = (ImagePart)slidePart.GetPartById(blipRelId); var imageFileName =

我正在使用OpenOfficeSDK 2.0分析PowerPoint演示文稿。在程序的某一点上,我将一个流传递给一个方法,该方法将返回图像的MD5。然而,流中似乎有一个问题,甚至在我的MD5方法出现之前

这是我的密码:

// Get image information here.
var blipRelId = blip.Embed;
var imagePart = (ImagePart)slidePart.GetPartById(blipRelId);
var imageFileName = imagePart.Uri.OriginalString;
var imageStream = imagePart.GetStream();
var imageMd5 = Hasher.CalculateStreamHash(imageStream);
在debug中,在将其放入Hasher.CalculateStreamHash
之前,我检查imageStream属性。我立即发现ReadTimeout和WriteTimeout都有类似的错误:

imageStream.ReadTimeout' threw an exception of type 'System.InvalidOperationException
imageStream.WriteTimeout' threw an exception of type 'System.InvalidOperationException
以下是我在调试期间看到的属性的图片,以防有所帮助:

这段代码正在PowerPoint演示文稿上运行。我想知道它是压缩的(PowerPoint演示文稿基本上只是一个压缩的文件)这一事实是否是我看到这些超时错误的原因

更新:我尝试获取流,获取图像并将其转换为字节数组,然后将其作为内存流发送到MD5方法,但在流的读/写超时属性中仍然会出现相同的错误。以下是当前的代码:

// Get image information here.
var blipRelId = blip.Embed;
var imagePart = (ImagePart)slidePart.GetPartById(blipRelId);
var imageFileName = imagePart.Uri.OriginalString;
var imageStream = imagePart.GetStream();

// Convert image to memory stream
var img = Image.FromStream(imageStream);
var imageMemoryStream = new MemoryStream(this.imageToByteArray(img));
var imageMd5 = Hasher.CalculateStreamHash(imageMemoryStream);
为清楚起见,以下是CalculateStreamHash方法的签名:

public static string CalculateStreamHash([NotNull] Stream stream)

恶作剧管理!通过使用BufferedStream并将重载方法添加到接受BufferedStream作为参数的MD5方法中,我能够克服此问题:

// Get image information here.
var blipRelId = blip.Embed;
var imagePart = (ImagePart)slidePart.GetPartById(blipRelId);
var imageFileName = imagePart.Uri.OriginalString;

// Convert image to buffered stream
var imageBufferedStream = new BufferedStream(imagePart.GetStream());
var imageMd5 = Hasher.CalculateStreamHash(imageBufferedStream);
……和:

public static string CalculateStreamHash([NotNull] BufferedStream bufferedStream)