I want to get export from datagridview to text fil

2019-09-16 06:34发布

I want to get export from datagridview to text file but i get following 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.

This is my 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.");

this is my report for try-catch : this is my report for try-catch:

this is report after changeing path and filename

This id exact code after some edit :

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

4条回答
乱世女痞
2楼-- · 2019-09-16 06:52

The reason of System.Security.SecurityException in your call of File.Create method. It creates file and opens FileStream on created file. You did not close opened by File.Create stream so StreamWriter can not open a second one.

Change code to following:

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.");
查看更多
一夜七次
3楼-- · 2019-09-16 06:52

add this in config file and I think this will work for you

查看更多
狗以群分
4楼-- · 2019-09-16 07:01
  1. right click on the file "export.txt" -> Properties -> Security make sure your user has write permission.
  2. use streams inside using statement like

    using (var fileStream = new FileStream(file, FileMode.Open))
    {
         using (var textReader = new StreamReader(fileStream))
         {
         }
     }
    
查看更多
一纸荒年 Trace。
5楼-- · 2019-09-16 07:07

Try this code

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) { } 
查看更多
登录 后发表回答