2016-12-05 222 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; 
    }