2015-04-16 3 views
-4
using System; 
using System.IO; 
namespace GetFilesFromDirectory 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.WriteLine("Write your Name of Disc"); 
      string myDisc = Console.ReadLine(); 
      string myDisc1 = "@\""; 
      Console.WriteLine("Write your Directory"); 
      string myDir1 = Console.ReadLine(); 
      string myDir = ":\\"; 
      string myDir2 = "\\\""; 
      string myPath = myDisc1 + myDisc + myDir + myDir1 + myDir2; 
      Console.WriteLine(myPath); 
      string[] filePaths = Directory.GetFiles(myPath); 


      foreach (var files in filePaths) 
      { 
       Console.WriteLine(files); 
      } 
      Console.ReadLine(); 
     } 

    } 
} 
+0

Вы, вероятно, делаете неправильный путь, отлаживать и посмотреть, что у вас есть в myPath перед вызовом GetFiles. Это значение myPath должно открыть данную папку. – Adil

+5

Что именно ваш вопрос? Вы получаете ошибки компилятора? Логические ошибки? Что вы ожидали, что случилось? – nvoigt

+0

Показать хотя бы пример содержимого 'myPath' – DrKoch

ответ

0

Из того, что я могу сказать, ваш myPath будет выглядеть @"discName:\dirName\", вам не нужно приобщить @" или ".

Эти символы используются, когда вы создаете новую строковую переменную, чтобы отметить, что это String literal, но вы включаете эти символы в фактическую строку, которую вы генерируете.

Другими словами, удалить myDisc1 и myDir2

лучше, чем, как отметил DrKoch

string myPath = Path.Combine(myDisc + @":\", myDir1); 
+0

На самом деле вам нужно добавить «: \\» после myDisc –

+1

Косая черта не будет добавлена, если путь является ссылкой на привод http://stackoverflow.com/questions/19909008/path-combine-does-not-add- directory-separator-after-drive-letter –

+0

@alessiobortolato - Извинения, спасибо – Sayse

0

Попробуйте

static void Main(string[] args) 
    { 
     Console.WriteLine("Write your Name of Disc"); 
     //You need to add :\ to make it a fullPath 
     string myDisc = Console.ReadLine()+":\\"; 

     Console.WriteLine("Write your Directory"); 
     string myDir1 = Console.ReadLine(); 


     string myPath = Path.Combine(myDisc , myDir1); 
     Console.WriteLine(myPath); 
     string[] filePaths = Directory.GetFiles(myPath); 


     foreach (var files in filePaths) 
     { 
      Console.WriteLine(files); 
     } 
     Console.ReadLine(); 
    } 

Что вы делаете, создает строковый Wich это буквальный отступ строки, которую вы хотите, но вам не нужно это делать.
Например, если вы пишете это:
string [email protected]"c:\dir\subdir"; его реальная стоимость будет c:\dir\subdir
вместо этого "@\"c:\\dir\\subdir\""; будет @"c:\dir\subdir"
Прочитайте эти статьи, чтобы лучше понять строковые литералы и дословные строки https://msdn.microsoft.com/en-us/library/aa691090(v=vs.71).aspx
https://msdn.microsoft.com/en-us/library/362314fe.aspx
https://msdn.microsoft.com/en-us/library/h21280bw.aspx

Смежные вопросы