2012-03-04 3 views
0

Я пытался получить список файлов в моем удаленном каталоге и проверить только файл с именем «test»; затем скопируйте его в мой локальный каталог.Эффективный способ получить список файлов и скопировать в локальный каталог?

Просто сделал здесь простую вещь, но кто-то, пожалуйста, сообщите мне, как лучше всего справиться с этим сценарием.

class Program 
{ 
    static void Main(string[] args) 
    { 
     var getfiles = new fileshare.Program(); 
     string[] filteredfiles =getfiles.GetFileList(); 

     bool b; 
     foreach (string file in filteredfiles) 
     { 
      if(b=file.Contains("test")) 
      { 
       getfiles.copytolocal(file); 
      } 

     } 

    } 

    private string[] GetFileList() 
    { 
     string[] filepaths = Directory.GetFiles(@"\\testserver\dev"); 
     return filepaths; 
    } 
    private void copytolocal(string filename) 
    { 
     File.Copy(filename, @"C:\" + filename); 
    } 
} 

Даже я просто застрял, когда я был скопировать файл, имя файла содержит весь каталог внутри файла так имя файла выглядеть как «\\ TestServer \ DEV \ test.txt». Поэтому он не смог скопировать на локальный.

+0

Что именно вы ожидаете 'если (б = файл. Содержит («тест»)) 'делать? –

+0

Кроме того, вы ожидаете сохранения каталогов исходного пути? –

+0

@ M.Babcock, если (b = file.Contains («test»)), у меня есть два файла, такие как XYZ.txt и test.txt на моем удаленном компьютере, getlist получит все файлы и передаст их в состояние, если его true, то вызовите мой метод copy2local, чтобы скопировать этот файл в мой локальный – Usher

ответ

1

Вы можете использовать DirectoryInfo фильтровать вниз к любому файлу, который содержит «тест» строка:

private FileInfo[] GetFileList(string pattern) 
{ 
    var di = new DirectoryInfo(@"\\testserver\dev"); 
    return di.GetFiles(pattern); 
} 

, а затем:

foreach (var file in GetFileList("*test*")) 
{ 
    getfiles.copytolocal(file.FullName); 
} 
+0

Есть ли причина, по которой вы решили придерживаться с 'FileInfo []' с 'DirectoryInfo.GetFiles' над более дружественным' IEnumerable 'с' DirectoryInfo.EnumerateFiles'? Ваш ответ не является ошибочным в этом отношении, но кажется, что вы можете сохранить будущий вопрос с использованием метода и сбора t ype, который игнорирует файлы, к которым у пользователя нет доступа. --- РЕДАКТИРОВАТЬ: При дальнейшей проверке похоже, что вы пытаетесь использовать шаблон из исходного кода. Никаких объяснений не было, но так как вы так сильно изменили метод, я бы подумал, что вы хотите показать лучший способ. –

+0

Поскольку возвращаемые данные файла уже соответствуют шаблону, это те, которые будут скопированы в любом случае, если предположить, что их не так много, это не должно иметь значения. – BrokenGlass

+0

Это верно, если пользователь, запускающий приложение, не имеет разрешения на один или несколько определенных файлов или весь каталог, и в этом случае исключение будет выбрано при повторном выполнении коллекции. –

1

Вы ищете Path.GetFileName() (который возвращает строку).

+0

, так что я могу вернуться назад или как получить только имя файла? – Usher

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