2010-08-10 4 views
3

У меня есть коллекция изображений в папке моего проекта.Как определить, существует ли файл в папке проекта?

Как определить, существует ли изображение в папке проекта? Я использую C#. Благодарю.

+0

Не могли бы вы точно указать, когда вам нужно их обнаружить? Мы говорим об этом перед компиляцией или при скомпилированной программе? –

+0

У меня есть список элементов, данные привязываются к списку файлов в моей локальной папке Z, которые состоят из различных файлов, таких как .doc, .xls и т. Д. В моих файлах проекта (решения) у меня есть папка с сборка файла изображения, а именно doc.png, xls.png и т. д. Теперь я хочу спеть файлы в папке Z, определить тип файла и попытаться вернуться как: string type = Path. GetExtension (FilePath); строка path = @ "image /" + type + ".png"; if (Exist (путь)) { Обратный путь; } else { return @ "image/other.png"; } потому что файлы находятся в папке моего решения, поэтому я не уверен, что это будет работать после развертывания. – VHanded

ответ

11
if (System.IO.File.Exists("pathtofile")) 
    //it exist 
else 
    //it does not exist 

EDITED МОЙ ОТВЕТ ПОСЛЕ комментарию ВОПРОС:

Я скопировал код и изменил функцию выходов, это должно работать

string type = Path.GetExtension(filepath); 
string path = @"image/" + type + ".png"; 
//if(System.IO.File.Exists(path)) I forgot to use the full path 
if (System.IO.File.Exists(Path.Combine(Directory.GetCurrentDirectory(), path))) 
{ return path; } 
else 
{ return @"image/other.png"; } 

Это будет действительно работать, когда развертывается приложение

+0

Альтернативой является использование «FileInfo», если вам также нужны временные метки и другая основная информация. –

+0

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

+0

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

-3

можно использовать

string[] filenames = Directory.GetFiles(path); 

, чтобы получить список файлов в папке, а затем перебирать их, пока не найдете то, что ищете (или нет)

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

+0

Это не очень хорошие идеи. –

+0

Не так эффективно, как методы 'File.Exists' или' FileInfo.Exists'. – tdammers

+0

Действительно ли это менее эффективно Вы бы использовали его в ленивом стиле оценки или загрузили файлы при запуске и сохранили список. – 2010-08-12 08:45:20

0

Использование File.Exists(Path Here) Если вы используете применение пути временный Path.GetTempPath()

EDIT: К сожалению, такой же ответ, как и выше!

1

Вопрос немного неясен, но создается впечатление, что вы после пути, на котором был установлен exe?

class Program 
    { 
    static Dictionary<string, string> typeImages = null; 

    static string GetImagePath(string type) 
    { 
     if (typeImages == null) 
     { 
     typeImages = new Dictionary<string, string>(); 
     string appPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 
     string path = Path.Combine(appPath, @"image/"); 
     foreach (string file in Directory.GetFiles(path)) 
     { 
      typeImages.Add(Path.GetFileNameWithoutExtension(file).ToUpper(), Path.GetFullPath(file)); 
     } 
     } 

     if (typeImages.ContainsKey(type)) 
     return typeImages[type]; 
     else 
     return typeImages["OTHER"]; 
    } 

    static void Main(string[] args) 
    { 
     Console.WriteLine("File for XLS="+GetImagePath("XLS")); 
     Console.WriteLine("File for ZZZ=" + GetImagePath("ZZZ")); 
     Console.ReadKey(); 
    } 
    } 

Это даст вам папку с изображениями, которая будет находиться там, где установлен exe. В среде dev вам нужно создать dir-образ для отладки и выпуска в пути к приложению, потому что именно там VS ставит exe.

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