2017-07-25 17 views
0

を拒否された私は、例外がスローされたWeb APIを使用してzipファイルを保存しようとしています:でアクセス 'C: WINDOWS system32に inetsrvに dotnetzip-uxoebj5p.tmpが'

Access to the path 'c:\windows\system32\inetsrv\DotNetZip-uxoebj5p.tmp' is 
denied. at System.IO.__Error.WinIOError(Int32 errorCode, String 
maybeFullPath) 
at 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) 

System.IO.FileStream..ctor(String path、FileMode mode、FileAccess access、 FileShare共有、Int32 bufferSize、FileOptionsオプション、String msgPath、 System.IO.FileStream..ctor(ファイルパスモード、ファイルモード)のbFromProxyブール値 at Ionic.Zip.SharedUtilities.CreateAndOpenUniqueTempFile(String dir、Stream & fs、String & filename)Archnies.Archnies.DownloadFile(文字列のURL)

コードでIonic.Zip.ZipFile.SaveでIonic.Zip.ZipFile.get_WriteStreamで() () :

  Logger.LogMessage("Downloading File From URL " + url); 
      // Construct HTTP request to get the file 
      HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(url); 
      httpRequest.CookieContainer = new System.Net.CookieContainer(); 

      for (int i = 0; i <= driver.Manage().Cookies.AllCookies.Count - 1; i++) 
      { 
       System.Net.Cookie ck = new System.Net.Cookie(driver.Manage().Cookies.AllCookies[i].Name, driver.Manage().Cookies.AllCookies[i].Value, driver.Manage().Cookies.AllCookies[i].Path, driver.Manage().Cookies.AllCookies[i].Domain); 
       httpRequest.CookieContainer.Add(ck); 
      } 
      String userAgent = (String)((IJavaScriptExecutor)driver).ExecuteScript("return navigator.userAgent;"); 
      httpRequest.Accept = "text/html, application/xhtml+xml, */*"; 
      httpRequest.UserAgent = userAgent;// "Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko"; 

      //HttpStatusCode responseStatus; 
      // Get back the HTTP response for web server 
      HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse(); 
      Stream httpResponseStream = httpResponse.GetResponseStream(); 

      // Define buffer and buffer size 
      int bufferSize = 1024; 
      byte[] buffer = new byte[bufferSize]; 
      int bytesRead = 0; 

      // Read from response and write to file 
      string userProfile = Configurations.AppDataPath; //Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); 
      byte[] b = null; 

      using (MemoryStream ms = new MemoryStream()) 
      { 
       int count = 0; 
       do 
       { 
        byte[] buf = new byte[1024]; 
        //count = stream.Read(buf, 0, 1024); 
        count = httpResponseStream.Read(buf, 0, 1024); 
        ms.Write(buf, 0, count); 
       } while (httpResponseStream.CanRead && count > 0);//while (stream.CanRead && count > 0); 
       b = ms.ToArray(); 
      } 
      string fileName = Path.Combine(userProfile, String.Format("archaniesReport{0}.zip", new Random().Next(512365412))); 
      Logger.LogMessage("File: " + fileName); 
      ZipFile zip = new ZipFile(); 
      zip.AddEntry(fileName, b); 

      zip.Save(Path.GetFileName(fileName)); 
      zip.Dispose(); 
      using (FileStream fileStream = File.Create(fileName)) 
      { 
       while ((bytesRead = httpResponseStream.Read(buffer, 0, bufferSize)) != 0) 
       { 
        fileStream.Write(buffer, 0, bytesRead); 
       } 
      } 
      File.Copy(Path.GetFileName(fileName), fileName, true); 
      return true; 

は私も

を試してみました
zip.TempFileFolder = Configurations.AppDataPath; 

しかし、それは問題を解決していないようです。

親切に、あなたがPath.GetTempPath()MSDN)を使用して取得され、一時的な場所にファイルをダウンロードすることができ、私は

+0

ファイルまたはフォルダにアクセス許可があるかどうかを確認します。 – summerGhost

+0

私は 'c:\ windows \ system32 \ inetsrv'にアクセス権を与えることはできません。C:\\ Windowsの下でフォルダのアクセス権を与えることを許可していません。 –

+0

十分な権限がある場所の外にファイルを移動する必要があります。 – summerGhost

答えて

0

を教えてください。ダウンロードが完了したら、ファイルFile.Copy(...)をユーザのフォルダに移動し、一時ファイルをFile.Delete(...)で削除することができます。

このアプローチを使用すると、アクセス拒否例外が発生しません。

+0

私は、完全なアクセス許可を持っているIISディレクトリのAppDataにファイルを保存しようとしていますが、私はdotnetzipのlibararyがIISディレクトリにインストールされていると考えています。ソリューション? –

+0

'Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)'は正しい解決策ですか? –

関連する問題