2011-05-19 104 views
2

我一直在努力解決這個問題了整整一天,但無論我做什麼,我不斷獲取相同的異常:UnauthorizedAccessException是使用在線路 未處理(包包= Package.Open(d.FullName,FileMode.Create,FileAccess.ReadWrite))Package.Open()異常:訪問路徑被拒絕

完整的代碼是:

NTAccount act = new NTAccount("c9lu-PC","c9lu"); 

DirectoryInfo d = System.IO.Directory.CreateDirectory(path); 

DirectorySecurity security = d.GetAccessControl(); 

security.AddAccessRule(new FileSystemAccessRule(act,FileSystemRights.FullControl,InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit, PropagationFlags.None, AccessControlType.Allow)); 

d.SetAccessControl(security); 

using (Package package = Package.Open(d.FullName, FileMode.Create, FileAccess.ReadWrite))  // where the exception occurs 
{ 

    PackageHelper.createPart(package, "/pages.zip" , MediaTypeNames.Application.Zip, 
        (stream) => 
        { 
         using (var parts = ZipPackage.Open(stream, FileMode.Create)) 
         { 
         } 
        } 

        ); 
} 

我真的不知道是什麼問題,請幫助我。

回答

3

難道它與你將一個目錄傳遞到Package.Open的第一個參數而不是文件名的事實有關嗎?應該更多這樣的:

// This gives you a directory object. It's all a directory/folder. No File. 
DirectoryInfo d = System.IO.Directory.CreateDirectory(path); 

// So use the Combine method to create a full path to a file 
string fileName = System.IO.Path.Combine(d.FullName, "pages.zip"); 

... 
// Then use that full path to create the Package. 
Package.Open(fileName, ... 
+0

喜添 我其實通過目錄的全名。我想要做的是在該目錄內創建包,那麼如何指定包的路徑? – Chen 2011-05-19 01:33:56

+0

正確的,你傳遞的是目錄的全名,但不是文件名。你需要給它一個文件名(目錄和文件名)。我認爲你出於某種原因將該部分移到了createPart調用中。 – Tim 2011-05-19 01:35:09

+0

如果我只使用d.Name而不是d.FullName,那麼異常會消失,但運行程序後沒有在文件夾內創建的包。 – Chen 2011-05-19 01:40:15