我想从 datagridview 导出到文本文件,但出现错误
Posted
技术标签:
【中文标题】我想从 datagridview 导出到文本文件,但出现错误【英文标题】:I want to get export from datagridview to text file but I get error 【发布时间】:2016-06-07 10:24:45 【问题描述】:我想从 datagridview 导出到文本文件,但我得到以下 error
:
An unhandled exception of type 'System.Security.SecurityException'
occurred in mscorlib.dll
Additional information: Request for the permission of type
'System.Security.Permissions.FileIOPermission, mscorlib,
Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
这是我的code
:
const string path = @"d:\export.txt";
if (!File.Exists(path))
File.Create(path);
TextWriter sw = new StreamWriter(@"d:\export.txt");
int rowcount = dgvSum.Rows.Count;
for (int i = 0; i < rowcount - 1; i++)
sw.WriteLine(dgvSum.Rows[i].Cells[0].Value.ToString());
sw.Close();
MessageBox.Show(@"Text file was created.");
这是我的 try-catch 报告: this is my report for try-catch:
this is report after changeing path and filename
经过修改后,此 ID 与 code
完全相同:
try
const string path = @"c:\123\123.txt";
using (FileStream fileStream = File.Open(path,
FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
using (TextWriter sw = new StreamWriter(fileStream))
int rowcount = dgvSum.Rows.Count;
for (int i = 0; i < rowcount - 1; i++)
sw.WriteLine(dgvSum.Rows[i].Cells[0].Value.ToString());
MessageBox.Show(@"Text file was created.");
catch (Exception exception)
MessageBox.Show(exception.ToString());
//Console.WriteLine(exception);
【问题讨论】:
如果您将代码包装在try-catch
块中,您应该会看到问题与文件权限有关。
那么我该如何解决这个问题?
您需要检查您是否有权写入 D: 驱动器。
我该如何修复该权限?
基本ntfs权限管理wikihow.com/Change-File-Permissions-on-Windows-7
【参考方案1】:
在您调用File.Create
方法时出现System.Security.SecurityException
的原因。它创建文件并在创建的文件上打开FileStream
。您没有关闭由File.Create
流打开的,所以StreamWriter
无法打开第二个。
修改代码如下:
const string path = @"d:\export.txt";
using(FileStream fileStream = File.Open(path, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
using(TextWriter sw = new StreamWriter(fileStream))
int rowcount = dgvSum.Rows.Count;
for(int i = 0; i < rowcount - 1; i++)
sw.WriteLine(dgvSum.Rows[i].Cells[0].Value.ToString());
MessageBox.Show(@"Text file was created.");
【讨论】:
@HoomanDaddy 用打开的d:\export.txt
文件关闭所有文本编辑器,或者尝试不同的文件【参考方案2】:
试试这个代码
try
string filepath = @"d:\export.txt"
using (TextWriter stream = File.Exists(filepath) ? new StreamWriter(filepath) : new StreamWriter(File.Create(filepath)))
int rowcount = dgvSum.Rows.Count;
for(int i = 0; i < rowcount - 1; i++)
stream.WriteLine(dgvSum.Rows[i].Cells[0].Value.ToString());
catch (Exception)
【讨论】:
根据我对原始帖子的评论。您是否检查过您是否有权写入该位置?你能试试其他地方比如桌面吗? 我检查了所有的前提。 好的,我已将代码包装在一个 try-catch 块中。您能否逐步浏览它并在异常出现时给出屏幕截图。另外,当您尝试运行此代码时,您是否在其他任何地方打开了该文件?【参考方案3】:-
右键单击文件“export.txt”-> 属性-> 安全确保您的用户具有写入权限。
在 using 语句中使用流
using (var fileStream = new FileStream(file, FileMode.Open))
using (var textReader = new StreamReader(fileStream))
【讨论】:
【参考方案4】:在配置文件中添加这个,我认为这对你有用
【讨论】:
以上是关于我想从 datagridview 导出到文本文件,但出现错误的主要内容,如果未能解决你的问题,请参考以下文章
各位仁兄,我想请教一下在C#winform中,datagridview如何导出excel文件,将excel导入datagridview.