2

デバッグ モードで rdlc レポートを作成できますが、「パス 'C:\xxx.xlsx' へのアクセスが拒否されました」というエラーが発生します。回避策を Web で調べたところ、IIS ユーザーの C ドライブにアクセス許可を与えることを提案するソリューションが多数あることがわかりました。ただし、レポートをレンダリングするためだけにドライブ全体に許可を与えることは賢明ではないようです。では、このレンダリング場所、つまり C:\inetpub\MyApplication を変更するにはどうすればよいでしょうか? 一方、レポート側、つまりReportViewer.ProcessingMode = ProcessingMode.Local;rdlcプロパティの「ビルドアクション」「出力ディレクトリのコピー」の変更などの設定は必要ないと思いますか?

注:一部のレポートは C:\ の下の場所に書き込む権利がなく、IIS の場所でレポートを生成する方がはるかに優れていると思います。そうではありませんか?

では、この状況での最善の解決策は何ですか?


更新:このメソッドを変更して、ストリームを書き込まずにExcelとして読み取るようにするにはどうすればよいですか?

public static void StreamToProcess(Stream readStream)
{
    var writeStream = new FileStream(String.Format("{0}\\{1}.{2}", Environment.GetFolderPath(Environment.SpecialFolder.InternetCache), "MyFile", "xlsx"), FileMode.Create, FileAccess.Write);
    const int length = 16384;
    var buffer = new Byte[length];
    var bytesRead = readStream.Read(buffer, 0, length);
    while (bytesRead > 0)
    {
        writeStream.Write(buffer, 0, bytesRead);
        bytesRead = readStream.Read(buffer, 0, length);
    }
    readStream.Close();
    writeStream.Close();
    Process.Start(Environment.GetFolderPath(Environment.SpecialFolder.InternetCache) + "\\" + "file" + "." + "xlsx");
}       
4

1 に答える 1