0
private void Backup()
    {
        string x = txtb.Text; 
        string date = DateTime.Now.ToString("MM-dd-yyyy HH:mm:ss");
        string file = x + date + "database backup.sql";
        string conn = "server = localhost; user id = root; password =; database = sais_db;";

        try
        {
            MySqlBackup mb = new MySqlBackup(conn);
            mb.Export(file);
            MessageBox.Show("Database Backup Success!");
        }

        catch (MySqlException ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

Help please, when I run my program, I get a NotSupportedException error. How do I fix it?

P.S. txtb.Text contains directory path like this C:\Users\user\Desktop

4

1 回答 1

1

您的 DateTime 格式包括冒号。除了从路径中分隔驱动器号外,文件或路径名中不允许使用这些内容。

您可以通过更改 DateTime.Now 调用的格式字符串轻松解决此问题:

string x = txtb.Text; 
string date = DateTime.Now.ToString("MM-dd-yyyy HH-mm-ss");
string file = x + date + "database backup.sql";

当你运行这个你会得到 (assumimg txtb.Text contains foo ) infile

foo09-24-2016 14-20-59 数据库备份.sql

您也可以考虑一次性完成:

string file = String.Format(
    "{0}{1:MM-dd-yyyy HH-mm-ss}database backup.sql", 
    txtb.Text,
    DateTime.Now);

如果您允许您的用户提供(部分)文件名,请考虑检查无效字符。System.IO 命名空间中的Path类对此有一个很好的帮助GetInvalidFileNameChars

if (file.IndexOfAny(Path.GetInvalidFileNameChars()) > -1) 
{
    // show an error
    MessageBox.Show("invalid characters in file");
   return;
}

InvalidPathChars 也有类似的方法

于 2016-09-24T12:38:31.793 回答