C # GetFiles из локальной переменной - PullRequest
0 голосов
/ 24 марта 2011

Я пытаюсь получить путь из SQL, создать переменную для хранения пути и затем использовать 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();

Ответы [ 4 ]

1 голос
/ 24 марта 2011

Вы не можете динамически создать строку с использованием @ token как части динамической строки и ожидать, что она будет работать с литералом. @ in литерал интерпретируется компилятором / временем выполнения

string a = @"abc"; отличается от string b = "@abc";

В вашем примере вы не должны делать "@" + "\" "+ ... Так как возвращаемое значение уже является строковым типом, вам не нужно снова заключать их в кавычки и определенно не использовать символ "@". Если есть сомнения, отладьте и перетащите это выражение в окно просмотра. Вы увидите, что вы получили строку, которая выглядит как "@ \" xxxxx \ ""

Убедитесь, что возвращаемое значение имеет правильное значение пути. В случае сомнений класс System.IO.Path предоставляет ряд статических методов, которые могут помочь вам проверить или манипулировать строкой пути.

0 голосов
/ 24 марта 2011

Во-первых, старайтесь не делать две вещи в одной строке кода. Это делает отладку очень сложной, как вы уже нашли.

Я думаю, вы ищете что-то вроде этого:

    String Dir = "Temp";

    String SearchDir = @"\" + Dir + @"\";
0 голосов
/ 24 марта 2011

Если вы пытаетесь использовать UNC-путь, пожалуйста, добавьте две косые черты ("\\") перед вашей переменной returnValue.

0 голосов
/ 24 марта 2011

Попробуйте приложение, не обращаясь к базе данных, просто выполнив ее по пути, который, как вы знаете, работает.

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

Мне кажется, что первый аргумент GetFiles построен неправильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...