详解C#对路径...的访问被拒绝解决过程
作者:Mr.Emiya 发布时间:2021-06-01 11:12:10
标签: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函数的参数指向对象类型不匹配,从而导致出错。
来源:https://blog.csdn.net/Melody1994/article/details/93162637
0
投稿
猜你喜欢
- 记得在thinkphp框架中,模型名会自动转换为对应下划线的表名,如,UserType 自动转化为user_type,在平时写程序中很多地方
- 本文实例讲述了Java实现的校验银行卡功能。分享给大家供大家参考,具体如下:步骤:首先区分借记卡和信用卡,然后就是校验卡号,最后根据银联Bi
- Mybatis无法获取带有下划线前缀的字段的值今天下面,把几张表里的字段都加了前缀,如 article_id,article_title,a
- mapper-locations的作用说明1、mapper-locationsmapper-locations是一个定义mapper接口位置
- 循环队列结构队列特点队列为一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,
- 开篇:我们将前面的springboot整合H2内存数据库,实现单元测试与数据库无关性提供的Restful服务注册到spring cloud的
- 源码学习的好处不用多说,Mybatis源码量少、逻辑简单,将写个系列文章来学习。SqlSessionMybatis的使用入口位于org.ap
- Lambda 表达式Lambda 表达式是现代 C++ 中最重要的特性之一,而 Lambda 表达式,实际上就是提供了一个类似匿名函数的特性
- 一、概述现在大多数的电商APP的详情页长得几乎都差不多,几乎都是上面一个商品的图片,当你滑动的时候,会有Tab悬浮在上面,这样做用户体验确实
- 前言基本语法首先我们要知道java的基础语法。1.由26个英文字母大小写,0-9,_或$组成2.数字不可以开头3.不可以使用关键字和保留字,
- MVC三层架构我们在刚刚成为程序员的时候,就会被前辈们 “教育” 说系统的设计要遵循 MVC(Model-View-Controller)架
- 本文实例讲述了JAVA随机打乱数组顺序的方法。分享给大家供大家参考。具体实现方法如下:import java.util.Random;&nb
- MyBatis介绍MyBatis本是apache的一个开源项目iBatis, 2010年这个项目由apache software
- java中删除 数组中的指定元素要如何来实现呢,如果各位对于这个算法不是很清楚可以和小编一起来看一篇关于java中删除 数组中的指定元素的例
- 什么是volatile关键字volatile是Java中用于修饰变量的关键字,其可以保证该变量的可见性以及顺序性,但是无法保证原子性。更准确
- 前言前段时间在写RPC框架的时候用到了Kryo、Hessian、Protostuff三种序列化方式。但是当时因为急于实现功能,就只是简单的的
- 一、遇到一个问题1、读取CSV文件package com.guor.demo.charset;import java.io.Buffered
- 本文实例为大家分享了java数据库唯一id生成工具类的具体代码,供大家参考,具体内容如下import java.io.File;import
- 目录一、数组、集合和 LINQ1、数组二、字符串内插三、模式匹配四、委托和 Lambda 表达式五、async/await六、属性一、数组、
- 本文实例为大家分享了Java图片验证码代码,供大家参考,具体内容如下网页显示效果:index.jsp 使用两种方式强制图片更新: 1、设置图