2011-03-23 19 views
0

私はSQLからパスを取得しようとしている、パスを格納する変数を作成し、GetFilesを使用して、そのディレクトリ内のすべてのファイルを取得します。C#GetFilesローカル変数から

パスが存在することを確認しました。結果を書き込むと正しく表示されます。ただし、ディレクトリにアクセスしようとするたびに不明な例外が発生しています。うまくいけば、誰かが私が間違っていることを指摘することができます。

SqlConnection myConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["DBConnection"].ConnectionString); 

myConnection.Open(); 

SqlCommand cmd = new SqlCommand("SELECT FolderSource FROM MonitoredFolders WHERE FolderSource IS NOT NULL", myConnection); 

try 
{ 
    string returnvalue = (string)cmd.ExecuteScalar(); 
    Console.WriteLine(returnvalue); 
    Console.ReadLine(); 

    string[] filepath = Directory.GetFiles("@" + "\"" + returnvalue + "\"", "*.*", SearchOption.AllDirectories); 
} 

catch (Exception e) 
{ 
    Console.WriteLine("{0} Exception caught.", e); 
} 

myConnection.Close(); 
+1

例外的に、デバッグに役立つでしょう。 –

+1

'returnvalue'が有効なパスを保持していることを100%確信していますか? – ChrisF

+0

申し訳ありません、私のサーバーからexeを実行しているとき例外:Application:ConsoleApplication1.exe フレームワークのバージョン:v4.0.30319 説明:処理が未処理例外のため終了しました。 例外情報:System.NullReferenceException Stack: at ConsoleApplication1.Class1.Main() – Matt

答えて

1

ダイナミック文字列の一部として@ tokenを使用して文字列を動的に構築することはできず、それがリテラルで動作することを期待しています。戻り値がすでに文字列であるため、@リテラルで 「@」+「\」」+ ...

string a = @"abc";はあなたの例ではstring b = "@abc";

と異なっている、あなたがやるべきではありませんコンパイラ/ランタイムによって解釈されますあなたはあなたが "@"のような文字列で終わったのを見るでしょうが、 \ "xxxxx \" "

returnvalueに正しいパス値が設定されていることを確認してください。疑問がある場合は、System.IO.Pathクラスを使用して、パスstrのテストや操作に役立つさまざまな静的メソッドを提供しますing。

+0

情報をありがとうございます。私は通過していた余分なものをすべて取り除きました。今はうまくいきます。 – Matt

0

動作することがわかっているパスでデータベースを実行するだけで、データベースにアクセスせずにアプリケーションを試してみてください。

string directory = @"C:\temp" 
string[] filepath = Directory.GetFiles( directory , "*.*", SearchOption.AllDirectories); 

GetFilesの最初の引数が正しく構築されていないかのように見えます。

+0

あなたは正しいMalcolmです。GetFilesは変数を好きではありません。私は動作するようなものを見つける必要があります。 – Matt

0

まず、1行のコードで2つのことをしないでください。デバッグが難しくなります。

私はあなたがこのような何かを探していると思う:

String Dir = "Temp"; 

    String SearchDir = @"\" + Dir + @"\"; 
0

を使用すると、UNCパスをしようとしていると仮定すると、あなたの「のreturnValue」変数の前に2個のバックスラッシュ(「\\」)を追加してください。

+0

これは私の出力ウィンドウに表示されます。 ConsoleApplication1.exeで 'System.NullReferenceException'タイプの最初のチャンス例外が発生しました。アプリケーションがハングするだけです。 – Matt

関連する問題