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;
            }
        }

C#中,如果你试图使用StreamWriter来写入Excel文件,可能会遇到“路径访问拒绝”的错误,这通常是因为以下几个原因: 1. **权限问题**:检查当前应用程序是否有足够的权限去写入指定的文件路径。如果该路径在其他用户或系统账户下,你需要以管理员身份运行程序,或者明确授予应用程序写入权限。 2. **文件正在使用**:另一个可能是Excel文件正在被其他程序打开,导致无法写入。你需要先关闭所有与该文件关联的程序,然后再尝试写入。 3. **文件路径不存在或格式错误**:确认提供的路径是否准确无误,并且是一个存在的、可以被写入的文件夹。如果路径有问题,比如路径不存在或者路径格式不符合Windows标准,也会导致访问拒绝。 4. **文件类型限制**:有些操作系统会限制特定类型的文件(如.xlsx)只能由特定的应用程序打开。试着将文件改为.csv或其他可被文本编辑器读写的格式。 5. **跨域操作**:如果是从Web应用尝试写入本地文件,需要确保满足安全策略并处理好文件I/O的异步操作。 解决这个问题后,你可以尝试修改代码如下: ```csharp string filePath = "path_to_your_excel_file.xlsx"; using (StreamWriter writer = new StreamWriter(filePath)) { // Write data to the file } ``` 记得在实际操作前加上异常处理,以便捕获并处理可能出现的错误: ```csharp try { using (StreamWriter writer = new StreamWriter(filePath)) { writer.WriteLine("Your data here"); } } catch (UnauthorizedAccessException ex) { Console.WriteLine($"Access denied: {ex.Message}"); // Handle the error } catch (Exception ex) { Console.WriteLine($"An error occurred: {ex.Message}"); // General error handling } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值