首页 新闻 会员 周边 捐助

FileStream写的时候权限不足如何解决?fullPath的路径为E:\CSV

0
悬赏园豆:30 [已解决问题] 解决于 2016-07-26 11:36

/// <summary>
/// 将DataTable中数据写入到CSV文件中
/// </summary>
/// <param name="dt">提供保存数据的DataTable</param>
/// <param name="fullPath">CSV的文件路径</param>
public static void SaveCSV(DataTable dt, string fullPath)
{
FileInfo fi = new FileInfo(fullPath);
if (!fi.Directory.Exists)
{
fi.Directory.Create();
}
FileStream fs = new FileStream(fullPath, System.IO.FileMode.Create, System.IO.FileAccess.Write);//在这个地方写入文件被拒绝,怎么解决,我的文件夹的权限我已经是完全控制了,可是还是不行,求大神帮忙解决一下
//StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);
string data = "";
//写出列名称
for (int i = 0; i < dt.Columns.Count; i++)
{
data += dt.Columns[i].ColumnName.ToString();
if (i < dt.Columns.Count - 1)
{
data += ",";
}
}
sw.WriteLine(data);
//写出各行数据
for (int i = 0; i < dt.Rows.Count; i++)
{
data = "";
for (int j = 0; j < dt.Columns.Count; j++)
{
string str = dt.Rows[i][j].ToString();
str = str.Replace("\"", "\"\"");//替换英文冒号 英文冒号需要换成两个冒号
if (str.Contains(',') || str.Contains('"')
|| str.Contains('\r') || str.Contains('\n')) //含逗号 冒号 换行符的需要放到引号中
{
str = string.Format("\"{0}\"", str);
}

data += str;
if (j < dt.Columns.Count - 1)
{
data += ",";
}
}
sw.WriteLine(data);
}
sw.Close();
fs.Close();
}

待重逢的主页 待重逢 | 初学一级 | 园豆:10
提问于:2016-07-26 10:30
< >
分享
最佳答案
1

1.试试以管理员身份运行。

2.如果已经是以管理员身份运行了,那就去看下fullPath对应的路径是不是存在同名文件,并且文件是只读或者隐藏的,需要先将只读和隐藏属性去掉再使用FileStream。

收获园豆:25
ArthurLi | 小虾三级 |园豆:686 | 2016-07-26 10:46

我这个是windows服务,怎么才能以管理员身份运行?不存在同名文件,并且文件的权限已经是完全控制了

待重逢 | 园豆:10 (初学一级) | 2016-07-26 10:50

@待重逢: Windows服务有两个选择,一个是将服务的启动用户设置为Local System,另一个是将E:\CSV文件夹单独添加上服务启动用户的权限试试,添加用户组可能会存在问题。

ArthurLi | 园豆:686 (小虾三级) | 2016-07-26 10:53

@待重逢: 还有我看你标题写的fullPath的路径为E:\CSV,这个不是一个文件夹路径吗,这个跟文件夹路径冲突了也会出错。

ArthurLi | 园豆:686 (小虾三级) | 2016-07-26 10:56

@Don'tWorryBeHappy: 服务的启动用户是Local System,不好意思,我不知道如何单独给文件夹添加服务启动的权限!

待重逢 | 园豆:10 (初学一级) | 2016-07-26 10:57

@Don'tWorryBeHappy: 没有同名的文件夹

待重逢 | 园豆:10 (初学一级) | 2016-07-26 11:00

@待重逢: 我的意思是你FileStream传入的fullPath是一个文件夹路径“E:\CSV”,这样会出错,检查下是不是程序输入路径写错了。

ArthurLi | 园豆:686 (小虾三级) | 2016-07-26 11:02

@Don'tWorryBeHappy: 好的!

待重逢 | 园豆:10 (初学一级) | 2016-07-26 11:05

@Don'tWorryBeHappy: 搞定了,谢谢,问题我找到了,还是文件夹重名了!

待重逢 | 园豆:10 (初学一级) | 2016-07-26 11:36
其他回答(1)
0

你是完全控制,但并不是你的程序是完全控制。可以试试用管理员身份运行。

收获园豆:5
长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-07-26 10:38

我这个是windows服务,怎么才能以管理员身份运行?

支持(0) 反对(0) 待重逢 | 园豆:10 (初学一级) | 2016-07-26 10:43

@待重逢: 在服务上设置一下登录身份

支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-07-26 10:49

@长蘑菇星人:我改成了这样的方式还是不行 

支持(0) 反对(0) 待重逢 | 园豆:10 (初学一级) | 2016-07-26 10:53

@待重逢: 就像楼下说的,是不是文件夹或文件被设置成只读或隐藏了。

支持(0) 反对(0) 长蘑菇星人 | 园豆:1832 (小虾三级) | 2016-07-26 11:05

@待重逢: 感谢你的回答,给你5个园豆,希望不要嫌少,谢谢!

支持(0) 反对(0) 待重逢 | 园豆:10 (初学一级) | 2016-07-26 11:37
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册