2016-12-05 126 views
1

大家早上好,C#類型「System.UnauthorizedAccessException的」未處理的異常出現在mscorlib.dll

我已經創建了一個應用程序安裝嚮導,當我運行的應用程序,我可以看到從TXT文件,這是數據instaled文件夾內,但是當我試圖txt文件中編輯數據我有

型「System.UnauthorizedAccessException的」未處理的異常出現在mscorlib.dll 附加信息的錯誤:訪問路徑「 C:\ Program Files(x86)\ Jean-Paul Sartre Variety Theater \ CustomerStorage.txt'被拒絕。

string text = ""; 
StreamWriter sw = new StreamWriter("CustomerStorage.txt"); //THAT LINE GENERATE ERROR 

foreach (var item in Customers) 
{ 
    text = item.Value.CustomerName + "*" + item.Value.CustomerEmail + "*" + (int)item.Value.Customertype + "*" + item.Value.BookDate + "*" + item.Value.CustomerNo + "*" + item.Value.BookedPlayName + "*" + item.Value.PaymentStatus + "*" + item.Value.SeatNoOne + "*" + item.Value.SeatNoTwo + "*" + item.Value.SeatNoThree + "*" + item.Value.SeatNoFour + "*" + item.Value.SeatNoFive + "*" + item.Value.SeatNoSix + "*" + item.Value.PriceToPay + "*" + item.Value.GetPlayNo + "*" + item.Value.TotalNumberOfSeatsCustomer + "*"; 
    if (item.Value.Customertype == CustomerType.GoldMember) 
    { 
     GoldMember gm = (GoldMember)item.Value; 
     //saving gold member with new created date 
     gm.CreatedDate = gm.CreatedDate; 
     text += gm.CreatedDate + "*"; 
    } 
    sw.WriteLine(text); 
} 
sw.Close(); 

如果我創建設置嚮導期間所做的任何錯誤,將TXT文件到文件系統文件夾中我應該像成才允許我不知道。

+3

您的應用程序是否以管理員權限運行?默認情況下,UAC可防止在沒有管理員權限的情況下運行的應用程序寫入Program Files文件夾及其子文件夾。 如果CustomerStorage是可編輯文件,那麼最好將它存儲在本地應用程序數據文件夾(c:\ Users \ \ AppData \ Local \) – Pavel

+0

的某個地方嗎?是否檢查過您的應用程序是否具有寫入權限? –

+0

也重構你的代碼,以圍繞'using(){}'代碼塊結構包裝你的'StreamWriter'對象來處理/利用對象的自動處理。 – MethodMan

回答

0

格蘭特訪問方法解決了問題,謝謝你們。

public bool GrantAccess(string fullPath) 
    { 
     DirectoryInfo dInfo = new DirectoryInfo(fullPath); 
     DirectorySecurity dSecurity = dInfo.GetAccessControl(); 
     dSecurity.AddAccessRule(new FileSystemAccessRule(new SecurityIdentifier(WellKnownSidType.WorldSid, null), FileSystemRights.FullControl, InheritanceFlags.ObjectInherit | InheritanceFlags.ContainerInherit, PropagationFlags.NoPropagateInherit, AccessControlType.Allow)); 
     dInfo.SetAccessControl(dSecurity); 
     return true; 
    } 
相關問題