2016-09-24 12 views
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); 
     } 
    } 

Помогите пожалуйста, когда я запустил свою программу, я получаю ошибку NotSupportedException. Как это исправить?C# - невозможно резервное копирование базы данных mysql с ошибкой «Формат данного пути не поддерживается».

P.S. txtb.Text содержит путь к каталогу, подобный этому C: \ Users \ user \ Рабочий стол

+0

двоеточие не является приемлемым в имени файла на Windows. Это символ разделителя дисков (как в 'C:'). Вы не можете использовать ':' в имени файла во временной части. Используйте что-то еще. –

+0

Когда я изменяю 'string file = x + date +" database backup.sql ";' to 'string file = @" C: \ Users \ user \ Desktop \ database backup.sql ";', он работает. – ItaChi

+0

Да, это работает, потому что вы правильно используете ':' как разделитель дисков. Проблема заключается в использовании в других местах, таких как метка времени. 'C: \ Somefile.txt' является действительным; 'C: \ Somefile: something.txt' нет. Двоеточие - это разделитель ** ** **; вы можете использовать его для указания буквы диска, но вы не можете использовать его в другом месте в имени файла. –

ответ

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 содержит Foo) в file

foo09-24-2016 14-20-59database backup.sql

Вы можете также рассмотреть вопрос о сделать это на одном дыхании:

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

Если разрешить пользователям предоставлять (часть) имя файла рассмотреть возможность проверить наличие недопустимых символов. Класс Path в пространстве имен System.IO имеет хороший помощник для этого GetInvalidFileNameChars.

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

Существует аналогичный метод InvalidPathChars