Как правильно использовать File.Exists в приложении Windows - PullRequest
0 голосов
/ 13 ноября 2011

У меня есть приложение для Windows с папкой "images".Мне нужно проверить, существует ли изображение, что оно будет, во время выполнения.Ниже приведен код, который у меня есть, но он всегда возвращает false.

 if ( File.Exists("images/" + item.tool_image) )
        {
            Image img;
            img = Image.FromFile("images/" + item.tool_image);
            titem.Image = img;
        }

В чем проблема или правильный способ сделать это.

Ответы [ 6 ]

3 голосов
/ 13 ноября 2011

Если искомого файла нет в рабочем каталоге вашего приложения, вызовите File.Exists с полным путем:

if (File.Exists(@"C:\images\" + item.tool_image))
{ ... }

Конечно, убедитесь, что файл действительно существует в этом месте.

Жизнь станет проще, если вы воспользуетесь инструментами класса Path:

if (File.Exists(Path.Combine(@"C:\images", item.tool_image)))
{ ... }
1 голос
/ 13 ноября 2011

Как правильно использовать File.Exists в приложении для Windows?

Нет!

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

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

1 голос
/ 13 ноября 2011

Путь неверный, попробуйте изменить его на

 string basePath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
            string imageFileName = System.IO.Path.Combine(basePath, "Images",item.tool_image);
     if ( File.Exists(imageFileName) )
            {
                Image img;
                img = Image.FromFile(imageFileName);
                titem.Image = img;
            }
0 голосов
/ 13 ноября 2011

Как уже упоминалось, используйте полный путь. Я также активно использую Path.Combine, поэтому мне не нужно беспокоиться о том, чтобы пропустить косую черту или два при объединении каталогов. Текущий исполняющий каталог также полезен ...

File.Exists(Path.Combine(Environment.CurrentDirectory, "Images", item.tool_image));
0 голосов
/ 13 ноября 2011

Как вы это называете, вы ищете файл того, что находится в строке item.tool_image внутри папки images.Обратите внимание, что эта папка с изображениями находится внутри любого каталога, в котором находится ваш исполняемый файл.

Например, я просто назвал File.Exists ("images / image.jpg"), и это сработало.

0 голосов
/ 13 ноября 2011

он смотрит из того места, где в данный момент выполняется код, также «/» - это неправильное направление.Кроме того, вы определяете путь в нескольких местах, что впоследствии может привести к проблемам.

var path = string.Format(@"c:\somewhere\images\{0}", item.tool_image);
if (File.Exists(path))
{
   Image img;
   img = Image.FromFile(path);
   titem.Image = img;
}

Вы должны установить переменную path, но, по всей вероятности, в вашем примере кода местоположениевы ожидаете, что не проверяется.

...