GZipでファイルを圧縮する方法があります:
public static void CompressFile(string filePath)
{
string compressedFilePath = Path.GetTempFileName();
using (FileStream compressedFileStream = new FileStream(compressedFilePath, FileMode.Append, FileSystemRights.Write, FileShare.Write, BufferSize, FileOptions.None))
{
GZipStream gzipStream = new GZipStream(compressedFileStream, CompressionMode.Compress);
using (FileStream uncompressedFileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
int offset = 0;
while (true)
{
byte[] buffer = new byte[offset + BufferSize];
int bytesRead = uncompressedFileStream.Read(buffer, offset, BufferSize);
if (bytesRead == 0)
break;
gzipStream.Write(buffer, offset, bytesRead);
offset += bytesRead;
}
}
gzipStream.Close();
}
File.Delete(filePath);
File.Move(compressedFilePath, filePath);
}
私の問題は、テスト サーバー (Win08 R2) ではファイルが作成され、ブラウザー経由でダウンロードできることですが、Web ホスティング サーバー (古い Win08 R1) でもファイルが作成されますが、ダウンロードしたい場合はアクセス拒否例外がスローされます。 . 違いはファイル許可にあります。R2 サーバーではファイル アプリケーション プール ID (「MyWebSite」など) にアクセスできますが、R1 では「特別なアクセス許可」を持つ IIS_IUSRS のみです。