2014-10-09 6 views
-1

Я получаю запрос пользователя на путь в виде строки.Проверьте, существует ли файл или папка по указанному пути

путь может быть что-то вроде

C:\someFolder

C:\someFolder\someFile

C:\someFolder\someFile.jpg

Я хочу, чтобы проверить, если данный путь является файл или папка, и если это файл, я хочу проверить, действительно ли он завершается.

Я использовал FileAttributes fileRoot = File.GetAttributes(@path);, чтобы проверить, не является ли файл или папка, но она не работает должным образом.

+1

Я думаю fileAttributes работает должным образом, чтобы определить, если он файла или каталога. не могли бы вы рассказать мне, почему он работает неправильно? – jadavparesh06

+1

Дубликат [Лучший способ проверить, является ли путь файлом или каталогом?] (Http://stackoverflow.com/questions/1395205/better-way-to-check-if-path-is-a-file-or -a-directory) – Prix

+0

Вопрос повторяющийся, в следующий раз попробуйте найти хотя бы в SO! http://stackoverflow.com/questions/1395205/better-way-to-check-if-path-is-a-file-or-a-directory?lq=1 – mybirthname

ответ

2
using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string path = @"C:\"; 
      FileAttributes attributes = File.GetAttributes(path); 

      switch (attributes) 
      { 
       case FileAttributes.Directory: 
        if (Directory.Exists(path)) 
         Console.WriteLine("This directory exists."); 
        else 
         Console.WriteLine("This directory does not exist."); 
        break; 
       default: 
        if (File.Exists(path)) 
         Console.WriteLine("This file exists."); 
        else 
         Console.WriteLine("This file does not exist."); 
        break; 
      } 
     } 
    } 
} 

Вот рабочий образец, который я написал для вас , Он получает переменную path, определяет, является ли это файлом или файлом, а затем проверяет, существует ли он. Просто убедитесь, что вы правильно обрабатываете линию FileAttributes attributes = File.GetAttributes(path);, например, помещаете ее в блок try/catch, потому что, если файл или папка не существует, это вызовет исключение.

+0

Благодарим вас за быстрый и полный ответ. –

+0

Добро пожаловать. Просто убедитесь, что вы обрабатываете атрибуты FileAttributes attributes = File.GetAttributes (path); 'соответственно, например, поместив их в блок try/catch, потому что если файл или папка не существует, это вызовет исключение. –

+0

Ха, да, я только это осознал. –

2

Вы можете использовать File.Exists, чтобы проверить, существует ли файл.

Вы можете использовать Directory.Exists, чтобы проверить папки существуют

И тогда вы можете использовать это, чтобы проверить, если это файл или папка

private bool CheckIfExists(string path) 
{ 
    // get the file attributes for file or directory 
    FileAttributes attr = File.GetAttributes(path); 

    //detect whether its a directory or file 
    if((attr & FileAttributes.Directory) == FileAttributes.Directory) 
     return Directory.Exists(path); 
    else 
     return File.Exists(path); 
} 
+0

Downvoter хочет прокомментировать? –

+0

Спасибо за ваш ответ. Я пробовал это, но он не работает для папок. Он просто говорит, что «не существует». –

+0

@john use Directory.Exists для папок –

2
static void Main(string[] args) 
    { 
     string Path = @"C:\Abhishek\Documents"; 
     string filePath = @"C:\Abhishek\Documents.txt"; 
     bool isDirExists = Directory.Exists(Path); 
     bool isFileExists = File.Exists(filePath); 

     if (isDirExists) 
     { 
      Console.WriteLine("Directory Exists"); 
     } 
     else { 
      Console.WriteLine("Directory does not exists"); 
     } 
     if (isFileExists) 
     { 
      Console.WriteLine("File Exists"); 
     } 
     else 
     { 
      Console.WriteLine("File does not exists"); 
     } 
     Console.ReadKey(); 
    } 
+1

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

+0

@ jay_t55 это правильный способ сделать это, проголосовавший ответ не работает в каждом случае! Ему просто нужно проверить только одну строку ... – mybirthname

+0

Да, но есть вероятность, что существует каталог, а также файл с тем же именем. – Abhishek

0

бы вы прояснить это заявление:

, но он не работает должным образом

В каких случаях для "не правильно"?

Что касается вопроса:

Требует ли ваша задача, чтобы знать, если его файл или каталог?

В случае отсутствия (т. Е. Вы просто хотите иметь «истину», если файл существует), вы можете использовать File.Exists и получить необходимый результат. Исключение не исключено, если вы беспокоитесь.

var filePath = @"d:\Storage\Repo\Detrack\Detrack.bak"; 
var dirPath = @"d:\Storage\Repo\Detrack\"; 
var dirPathWithoutTrailingSlash = @"d:\Storage\Repo\Detrack"; 

Console.WriteLine("Path ({0}) exists = {1}", filePath, new FileInfo(filePath).Exists); 
Console.WriteLine("Path ({0}) exists = {1}", dirPath, new FileInfo(dirPath).Exists); 
Console.WriteLine("Path ({0}) exists = {1}", dirPathWithoutTrailingSlash, new FileInfo(dirPathWithoutTrailingSlash).Exists); 
Console.ReadLine(); 

Результаты:

Path (d:\Storage\Repo\Detrack\Detrack.bak) exists = True 
Path (d:\Storage\Repo\Detrack\) exists = False 
Path (d:\Storage\Repo\Detrack) exists = False 
+0

Я не знал, что существует две проверки 'exist' -'Directory.Exists' и' File.Exists', и поэтому я получал неправильные результаты, поэтому я подумал, что она работает неправильно. Извини за это. –

0

Вы можете использовать этот код, приведенный ниже, чтобы проверить его:

// get the file attributes for file or directory 
     FileAttributes attr = File.GetAttributes(@"c:\Temp"); 

     //detect whether its a directory or file 
     if ((attr & FileAttributes.Directory) == FileAttributes.Directory) 
     { 
      // Its a directory 
      // Do something here 
     } 
     else 
     { 
      // Its a file 
      // Do something here 
     } 
Смежные вопросы