我想从 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# 将 DataGridView 保存到文本文件

从 DataGridView 选定的单元格中获取文本

使用互操作将 datagridview 导出到 excel

各位仁兄,我想请教一下在C#winform中,datagridview如何导出excel文件,将excel导入datagridview.

如何将.net中DataGridView中的数据导出到Excel文本(是在windows窗体中)

将datagridview导出到csv文件