1. 程式人生 > 程式設計 >詳解C#對路徑...的訪問被拒絕解決過程

詳解C#對路徑...的訪問被拒絕解決過程

用C#想寫一個直接將資料庫查詢得到的datatable,直接匯出為csv格式的檔案,拷貝到匯出的操作類後,一直catch到的錯誤提示是對路徑的泛微被拒絕,一直排查原因,發現原來:FileStream(path,FileMode.OpenOrCreate,FileAccess.ReadWrite),path處所讀取的字串必須包含檔名稱以及格式。現在貼完整程式碼,以供幫助到像我一樣的初學者。

  private void button1_Click(object sender,EventArgs e)
    {
      System.IO.StreamReader st;

//由於我的查詢語句較長,採用了讀取txt文字的方式後做查詢操作。
      st = new System.IO.StreamReader(Application.StartupPath + "\\SQL2.txt",System.Text.Encoding.Default);
   
      string stingsql=st.ReadToEnd();
      st.Close();

      textBox1.Text = stingsql;
      DataTable dt = new DataTable();
      dt = bc.QueryCommand(stingsql);
   
      string filepath = @"F:\病案匯出備份\患者統計表.csv";//此處必須為路徑加檔名稱,否則
      ImportToCSV(dt,filepath);
    }

    public static void ImportToCSV(DataTable dt,string filepath)
    {
      FileStream fs = null;
      StreamWriter sw = null;
      try
      {
        fs = new FileStream(filepath,FileMode.Create,FileAccess.Write);
        sw = new StreamWriter(fs,Encoding.Default);
        string head = "";
        //拼接列頭
        for (int cNum = 0; cNum < dt.Columns.Count; cNum++)
        {
          head += dt.Columns[cNum].ColumnName + ",";
        }
        //csv檔案寫入列頭
        sw.WriteLine(head);
        string data = "";
        //csv寫入資料
        for (int i = 0; i < dt.Rows.Count; i++)
        {
          string data2 = string.Empty;
          //拼接行資料
          for (int cNum1 = 0; cNum1 < dt.Columns.Count; cNum1++)
          {
            data2 = data2 + "\"" + dt.Rows[i][dt.Columns[cNum1].ColumnName].ToString() + "\",";
          }
          bool flag = data != data2;
          if (flag)
          {
            sw.WriteLine(data2);
          }
          data = data2;

        }
        string msg = "資料被成功匯出到:" + filepath;
        MessageBox.Show(msg);
      }
      catch (Exception ex)
      {
        // logger.Error("匯出csv失敗!" + ex.Message);

        MessageBox.Show("匯出失敗" + ex.Message);
        return;
      }
      finally
      {
        if (sw != null)
        {
          sw.Close();
        }
        if (fs != null)
        {
          fs.Close();
        }
        sw = null;
        fs = null;
      }
    }

示例2

問題程式碼:

 private bool GetChannelInfo()
 {
      comCheckWindow.LoadCheckResult("準備載入專案通道資訊",Color.FromName("Green"));
      XmlDocument proFile = new XmlDocument(); //讀取專案配置檔案
      proFile.Load(proFilePath);
      XmlNodeList channelList = proFile.SelectSingleNode("Project").ChildNodes;
      if (channelList.Count == 0) return false;
      ......
      return true;
 }

在“proFile.Load(proFilePath)”語句處發生錯誤,提示對路徑…(proFilePath的值)的訪問被拒絕。

嘗試過將目標檔案重新選擇路徑(從C盤轉移到D盤),或提升程式執行許可權(在以管理員身份執行Visual Studio的情況下開啟專案檔案),均無效。

最後檢查程式時發現:路徑proFilePath的值不正確,執行“proFile.Load(proFilePath)”要求路徑proFilePath指向一個確定的XML檔案,但此處路徑的值為該XML檔案所在目錄的路徑,由於Load函式的引數指向物件型別不匹配,從而導致出錯。

到此這篇關於詳解C#對路徑...的訪問被拒絕解決過程的文章就介紹到這了,更多相關C# 路徑訪問被拒絕內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!