我有使用 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)上它会创建文件并且可以通过浏览器下载,但是在虚拟主机服务器(旧的 Win08 R1)上它也会创建文件,但是如果我想下载它,会抛出拒绝访问异常. 不同之处在于文件权限。在 R2 服务器上可以访问文件应用程序池标识(例如“MyWebSite”),但在 R1 上只有具有“特殊权限”的 IIS_IUSRS。