8

まず、ASP.NET 4.5 と DefaultAppPool(integrated 4.0) を使用していることを明確にします。DefaultAppPool ユーザーへの匿名アクセスも構成しました。DefaultAppPool へのすべてのアクセスを許可しました。System.Security.Principal.WindowsIdentity.GetCurrent()メソッドは私に同じユーザーを与えます。しかし、次の行を実行するとAccess to the path 'XXXX' is denied.例外が発生します。次に、テスト目的で、ユーザーにすべての権限を与えましEveryOneたが、それでも同じエラーが発生します。これがコード行です。トラスに注意してください

        using (ZipArchive archive = new ZipArchive(zipStream))
        {
            foreach (ZipArchiveEntry file in archive.Entries)
            {
                file.ExtractToFile(location,true);
            }
        }

これがスタックトレースです。

[UnauthorizedAccessException: Access to the path 'XXX' is denied.]
   System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +10793558
   System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) +1352
   System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share) +65
   System.IO.Compression.ZipFileExtensions.ExtractToFile(ZipArchiveEntry source, String destinationFileName, Boolean overwrite) +96
   XX.XX.XX.ExtractZipFile(Stream zipStream, String location) in XX.cs:44
   XX.XX.XX.XX.XX.XX.ExtractZipFile(Stream zipStream, String location) in XXX.cs:17
4

1 に答える 1

24

この場合の.NETFrameworkは、間違った例外を与えてくれます。問題は、location(ファイル名のないフォルダーの場所)を渡すだけだったということです。したがって、完全なパスを含めた後、これは機能します。

于 2013-02-10T08:19:07.337 に答える