2015-04-29 2 views
0

В моем приложении я мог бы иметь три путиКак перемещать файлы с одного пути на другой в C#

  1. \ Shared \ 1.txt
  2. \ Shared \
  3. \ Shared \ *. TXT

Путь к файлу будет иметь переменную.

Теперь Как проверить, имеет ли путь один файл или несколько или имеет подстановочный знак? & затем переместите их на другой путь.

+2

Что-то вроде 'Directory.GetFiles (@ "C: \ Shared \". "* .txt") ForEach (Файл => File.Move (файл, путь .Combine (@ "C: \ Destination", Path.GetFileName (файл)))); ' –

+0

Чтобы проверить открытку:' Boolean isWildCard = path.ContainsAny ('?', '*'); 'Поскольку ни' ? 'или' * 'могут использоваться в пределах пути. –

+0

Возможно, вы захотите это проверить: http://stackoverflow.com/questions/1395205/better-way-to-check-if-path-is-a-file-or-a-directory –

ответ

1

Ну, так как ни *, ни ? может быть в пути: они находятся в

Char[] forbidden = Path.GetInvalidPathChars(); 

так что вы можете просто смотреть на них

String path = @"C:\MyData\Shared\*.txt"; 
    ... 
    Boolean isWildCard = path.ContainsAny('?', '*'); 

Что касается файла/каталога

Boolean isFile; 

    if (File.Exists(path)) 
    isFile = true; // file already exists 
    else if (Directory.Exists(path)) 
    isFile = false; // directory already exists 
    else if (String.Equals(Path.GetExtension(path), ".txt", StringComparison.InvariantCultureIgnoreCase)) 
    isFile = true; // has txt extension, let it be a file 
    else 
    isFile = false; 

Однако кажется, что вам не нужно иметь никаких ветвей (isWild Карты, ISFILE) и просто перемещать файлы:

String path = @"C:\MyData\Shared\*.txt"; 
    ... 
    String sourceDirectory = Path.GetDirectoryName(path); 
    String destination = @"C:\Destination"; 

    Directory.GetFiles(sourceDirectory, "*.txt") 
      .ForEach(file => File.Move(file, Path.Combine(destination, Path.GetFileName(file)))); 
Смежные вопросы