2011-06-21 124 views
0

我想要寫入和讀取file.rdl在wpf c#中生成報告,但是出現錯誤「Access is denied to the path c:\ Document and Setting \ SipusProv \ 。TEMP \ reportTemp.rdl 這是我的源代碼:訪問被拒絕的路徑C:WPF C#

private void LaporanRdl(string rdl, DataSet data, string judul) 
    { 

     DataSet dt = data; 
     dt.DataSetName= "Data"; 
     Masaddy.Reprot report = new Masaddy.Reprot(); 
     try 
     { 

      //System.IO.StreamReader strReader = new System.IO.StreamReader(AppDomain.CurrentDomain.BaseDirectory + @"\rdl\" + rdl + ".rdl"); 
      System.IO.StreamReader strReader = new System.IO.StreamReader(AppDomain.CurrentDomain.BaseDirectory + @"\rdl\" + rdl + ".rdl"); 
      string pathTemp = AppDomain.CurrentDomain.BaseDirectory + @"Temp\reportTemp.rdl"; 
      System.IO.StreamWriter strWriter = new System.IO.StreamWriter(pathTemp); 

     string strIsi = ""; 
     while (strIsi != "</Report>") 
     { 

      strIsi = strReader.ReadLine().Trim(); 
      if (strIsi == "<Value>txtDep</Value>") 
      { 
       strIsi = "  <Value>" + this.ddDeputi.SelectedItem.ToString() + "</Value>"; 

      } 
      if (strIsi == "<Value>txtDir</Value>") 
      { 
       strIsi = "  <Value>" + this.ddDir.SelectedItem.ToString() + "</Value>"; 

      } 
      if (strIsi == "<Value>txtSubDir</Value>") 
      { 
       strIsi = "  <Value>" + this.ddSubDir.SelectedItem.ToString() + "</Value>"; 

      } 
      if (strIsi == "<Value>txtTahun</Value>") 
      { 
       strIsi = "  <Value>" + this.txtTahun.Text.ToString() + "</Value>"; 

      } 
      strWriter.WriteLine(strIsi); 
     } 
     strWriter.Dispose(); 
     Masaddy.ReportForm r = new Masaddy.ReportForm(AppDomain.CurrentDomain.BaseDirectory + @"\\Temp\\reportTemp.rdl", "Data", dt.Tables[0]); 
     r.Text = judul; 
     r.Show(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message.ToString()); 
     } 

    } 
+0

您正在使用哪個版本的Windows? –

+2

好嗎?你檢查了權限嗎?該文件是否在另一個進程中打開?該文件是否是隻讀的?到目前爲止你檢查了什麼? – Cameron

+2

另外,與你的問題完全無關,你可能想看看美妙的'System.Path'類(特別是['Combine()'](http://msdn.microsoft.com/en-us/library/ fyy7a5kt.aspx)方法)。 – Cameron

回答

0

我覺得你在Windows Vista上運行的程序/ 7 嘗試使用應用程序清單文件

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> 
<security> 
    <requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <!-- UAC Manifest Options 
     If you want to change the Windows User Account Control level replace the 
     requestedExecutionLevel node with one of the following. 

    <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
    <requestedExecutionLevel level="requireAdministrator" uiAccess="false" /> 
    <requestedExecutionLevel level="highestAvailable" uiAccess="false" /> 

     Specifying requestedExecutionLevel node will disable file and registry virtualization. 
     If you want to utilize File and Registry Virtualization for backward 
     compatibility then delete the requestedExecutionLevel node. 
    --> 
    <requestedExecutionLevel level="asInvoker" uiAccess="false" /> 
    </requestedPrivileges> 
</security> 

1

「訪問被拒絕」的含義正是它所說的。真正的問題是

  • 什麼用戶是你的代碼運行?
  • 哪些資源受到失敗操作的影響?
  • 該用戶通常對每個資源擁有哪些權限?
  • UAC是否進場?

向世界其他地方詢問爲什麼權限與您的特定系統上的權限是一致的。只有你有能力調查這一點。

這個「問題」給了我一個可怕的衝動,說「plz send me teh configz」。