2016-09-24 8 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 \ Desktopのようなディレクトリパスが含まれています

+0

コロンは、Windows上のファイル名には受け入れられないための同様の方法があります。それはドライブの区切り文字です( 'C:'のように)。時間部分のファイル名に ':'を使用することはできません。別のものを使用してください。 –

+0

'string file = x + date +"データベースbackup.sql ";"を '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"; 

あなたがこれを実行すると(txtb.TextがFOOが含まれていassumimg)あなたは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); 

ユーザーがファイル名の一部を提供することを許可する場合は、無効な文字を確認することを検討してください。 System.IO名前空間のPathクラスには、GetInvalidFileNameCharsという素晴らしいヘルパーがあります。

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

InvalidPathChars

関連する問題