2015-10-07 2 views
0

Не уверен, что я делаю неправильно. Сохраняет ошибку, что файл не найден в последней строке.Файл не найден в каталоге

string XMLPackagesDir = "C:\\Users\\ro\\Desktop\\Cl\\Cle\\Xm\\"; 
DirectoryInfo DirInfo = new DirectoryInfo(XMLPackagesDir); 
foreach (FileInfo fi in DirInfo.GetFiles("*.*", SearchOption.AllDirectories)) 
{ 
XmlSerializer serializer = new XmlSerializer(typeof(Response)); 
Response i; 
FileStream fs = null; 
fs = new FileStream("XMLPackagesDir" + fi.Name, FileMode.Open); 

ответ

3

Вы используете строковый литерал вместо переменной. Используйте

fs = new FileStream(XMLPackagesDir + fi.Name, FileMode.Open); 

вместо

fs = new FileStream("XMLPackagesDir" + fi.Name, FileMode.Open); 

или еще лучше

fs = new FileStream(Path.Combine(XMLPackagesDir, fi.Name), FileMode.Open); 

так что вам не придется беспокоиться о задней косой черты.

2

у вас есть объект string XMLPackagesDir. Но вы используете строку в последней строке:

fs = new FileStream("XMLPackagesDir" + fi.Name, FileMode.Open); 

Используйте свой объект, и на передовую практику, использовать Path библиотеки:

fs = new FileStream(Path.Combine(XMLPackagesDir, fi.Name), FileMode.Open); 
0

Других ответы дали решение в вашей опечатке. Но я хочу сказать, что класс FileInfo имеет свойство с именем FullName, которое, как объясняет имя, содержит полное имя файла с его именем папки.

Для чего нужна эта конкатенация строк?

Это просто

fs = new FileStream(fi.FullName, FileMode.Open); 
0

попробовать с

public static void foo(String path) { 
      try { 
       DirectoryInfo DirInfo = new DirectoryInfo(path); 
       foreach (FileInfo fi in DirInfo.GetFiles("*.*", SearchOption.AllDirectories)){ 
        XmlSerializer serializer = new XmlSerializer(typeof(Response)); 
        Response i; 
        FileStream fs = null; 
        fs = new FileStream(fi.FullName, FileMode.Open); 
       } 
      } catch (Exception ex) { 
       Log.Error(ex); 
      } 
     } 
Смежные вопросы