1

当我尝试从高清读取文件时

FileInfo fi = new FileInfo(ofd.FileName);
if (fi.Exists)
    FileStream stream = fi.Open(FileMode.Open, FileAccess.Read);

当我检查我的 stream.Position 和 stream.Length 时,它们都是相同的。一般来说,我希望 stream.Position 应该为零。由于我还没有阅读流中的内容。

但我可以看到 stream.Position 在流中有最后一个位置。由于位置和长度之间没有区别,因此当我尝试使用 UploadFromStream(stream) 将文件上传到 BLOB 时,它失败了。当然,我有另一种解决方法来使代码正常工作。但我是关于上述问题,为什么我必须重置位置才能将文件上传到 BLOB。

4

1 回答 1

0

默认的 FileStream 行为是 stream.position 将设置为 0 除非您已阅读内容。如果您只是将代码仅用于测试,您将看到 stream.position 设置为 0,但 stream.length = 0xLENGTH。我刚刚测试了您的代码,如下所示,我可以看到完全相同的结果。

 string filename = @"c:\2012\Procmon.exe";
 FileInfo fi = new FileInfo(filename);
 FileStream stream = fi.Open(FileMode.Open, FileAccess.Read);

当您将流作为参数传递给函数时,我遇到过类似的事件,在这种情况下,流位置一直设置为流长度,这与您的情况非常相似。这个SO 讨论讨论了与您类似的情况。

于 2012-08-31T01:03:25.050 回答