1

BinaryReader を使用して、OWA を使用して Exchange メールボックスから Excel 2007 ファイルを読み取っています。その後、ファイルは BinaryWriter を使用してディスクに書き込まれます。私の問題は、ライターが終了したときに 2 つのファイルが一致しないことです。さらに悪いことに、Excel 2007 は書き込んだファイルを開けません。

以前の Excel 2003 では、以下のソリューションで問題はありませんでした。ファイルが Excel 2003 形式のファイルである場合、Excel 2007 には問題がなく、ファイル形式が Excel 2007 (*.xlsx) である場合のみです。

バイナリリーダー:

using(System.IO.Stream stream = resource.GetInputStream(attachedFiles[k].Address))
{
    using(System.IO.BinaryReader br = new System.IO.BinaryReader(stream))
    {
        attachment.Data = new byte[attachedFiles[k].Size];
        int bufPosn=0, len=0;
        while ((len = br.Read( attachment.Data, bufPosn, attachment.Data.Length-bufPosn )) > 0)
        {
            bufPosn += len;
        }
        br.Close();
    }
}

BinaryWriter:

FileStream fs = new FileStream(fileName, FileMode.Create);
BinaryWriter binWriter = new BinaryWriter(fs);
binWriter.Write( content, 0, content.Length );
binWriter.Close();
fs.Close();

提案を喜んで受け取りました。

4

2 に答える 2

2

この問題は、attachedFiles[k].Sizeによって返される値が実際のファイルサイズをはるかに超えていたことが原因で発生しました。Excel 2003ファイルはこれによる影響を受けていないようですが、Excel 2007ファイルは圧縮されているため脆弱です(解凍ルーチンは明らかにファイルの見方が異なります)。

バッファのサイズを修正したら、ファイルは問題ありません。

提案をありがとう

于 2010-04-07T13:20:18.587 に答える
0

IE8 と OWA に問題がありますが、あなたのケースに当てはまるかどうかはわかりません。

このサイトへのリンクもあるこのサイトをチェックしてください。彼らは基本的に、OWA を使用して xmlx および docx ファイルをダウンロードする問題を回避する方法を説明しています。

于 2010-04-06T22:00:39.700 に答える