1

HDからファイルを読み込もうとすると

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

stream.Position と stream.Length を確認すると、どちらも同じです。一般に、stream.Position はゼロである必要があります。ストリームでコンテンツを読んでいないので。

しかし、私はストリームを見ることができました.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 に答える