Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何正确使用windows应用程序中存在的文件_C#_Windows Applications - Fatal编程技术网

C# 如何正确使用windows应用程序中存在的文件

C# 如何正确使用windows应用程序中存在的文件,c#,windows-applications,C#,Windows Applications,我有一个带有“图像”文件夹的windows应用程序。我需要检查一个映像是否存在,它将在运行时检查。下面的代码是我所拥有的,但它总是返回false if ( File.Exists("images/" + item.tool_image) ) { Image img; img = Image.FromFile("images/" + item.tool_image); titem.Image = img;

我有一个带有“图像”文件夹的windows应用程序。我需要检查一个映像是否存在,它将在运行时检查。下面的代码是我所拥有的,但它总是返回false

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

问题是什么?正确的方法是什么。

如果要查找的文件在应用程序的工作目录中不存在,请使用完全限定的路径调用
file.Exists

if (File.Exists(@"C:\images\" + item.tool_image))
{ ... }
当然,请验证文件是否确实存在于该位置

如果使用
Path
类提供的工具,您会发现生活更轻松:

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

如果要查找的文件在应用程序的工作目录中不存在,请使用完全限定路径调用
file.Exists

if (File.Exists(@"C:\images\" + item.tool_image))
{ ... }
当然,请验证文件是否确实存在于该位置

如果使用
Path
类提供的工具,您会发现生活更轻松:

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

它是从代码当前运行的位置看的,并且“/”是错误的方向。此外,您正在多个位置定义路径,这可能会导致以后出现问题

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

由您设置变量
路径
,但在您的代码示例中,很可能没有检查您期望的位置。

它是从代码当前运行的位置查看的,而且“/”是错误的方向。此外,您正在多个位置定义路径,这可能会导致以后出现问题

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
,但在您的代码示例中,很可能没有检查您期望的位置。

按照您的调用方式,您正在查找图像文件夹中字符串item.tool\u image中的任何文件。请注意,此图像文件夹位于包含可执行文件的任何目录中


例如,我刚刚调用了File.Exists(“images/image.jpg”),它就工作了。

按照您的调用方式,您正在查找images文件夹中字符串item.tool\u image中的任何文件。请注意,此图像文件夹位于包含可执行文件的任何目录中


例如,我刚刚调用了File.Exists(“images/image.jpg”),它成功了。

正如大家提到的,使用完全限定路径。我还大量使用Path.Combine,所以在合并目录时,我不必担心丢失一两个斜杠。当前正在执行的目录也很有用

File.Exists(Path.Combine(Environment.CurrentDirectory, "Images", item.tool_image));

正如大家提到的,使用完全限定路径。我还大量使用Path.Combine,所以在合并目录时,我不必担心丢失一两个斜杠。当前正在执行的目录也很有用

File.Exists(Path.Combine(Environment.CurrentDirectory, "Images", item.tool_image));

这条路错了,试着把它改成

 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;
            }

这条路错了,试着把它改成

 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;
            }
如何正确使用windows应用程序中存在的文件

在试图打开文件之前检查文件是否存在几乎是不合适的。这里还有其他一些东西在起作用:权限、锁定、共享、时间

相反,正确的方法是尝试打开文件,不管它是否存在,然后在尝试打开文件失败时捕获异常。您必须能够处理此异常,即使在执行File.Exists()检查之后也是如此。这使得您的初始文件.Exists()检查不仅对代码来说是多余的,而且是浪费的,因为它会导致额外的文件系统错误。。。在编程方面,没有什么比使用文件系统更慢的了

如何正确使用windows应用程序中存在的文件

在试图打开文件之前检查文件是否存在几乎是不合适的。这里还有其他一些东西在起作用:权限、锁定、共享、时间


相反,正确的方法是尝试打开文件,不管它是否存在,然后在尝试打开文件失败时捕获异常。您必须能够处理此异常,即使在执行File.Exists()检查之后也是如此。这使得您的初始文件.Exists()检查不仅对代码来说是多余的,而且是浪费的,因为它会导致额外的文件系统错误。。。而且,在编程方面,没有什么比使用文件系统更慢的了。

exist中提到的路径是不正确的。使用图像文件夹的完整路径。如果floder位于本地计算机上,请使用appdomain.basepath/“image/”+variable获取文件路径时应使用Path.Combine方法,以避免在字符串中添加斜杠。exist中提到的路径可能重复不正确。使用图像文件夹的完整路径。如果floder位于本地计算机上,请使用appdomain.basepath/“image/”+variable获取文件路径时应使用Path.Combine方法,以避免在字符串中添加斜杠。可能需要使用
@“…”
逐字字符串或转义反斜杠
“\\”
。您可能希望转义反斜杠字符,或者使用“@”符号表示未转换的字符串。此外,结尾还有一个额外的引号。需要使用
@“…”
逐字字符串或转义反斜杠
“\\”
。您可能希望转义反斜杠字符,或使用“@”符号表示未转义的字符串。最后还有一句话,真的吗?高效编程的目标不是在运行应用程序时减少错误,然后强制导致错误吗?@mattgcon-阅读我编辑的答案;也许这能更好地解释我的推理。简而言之,无论是从程序性能的角度还是从开发人员的时间/代码量的角度来看,使用File.Exists()效率都较低。我认为这是正确的。Exists不会绝对告诉您文件是否不存在,只有在文件不存在时才会告诉您。不要假设由于File.Exists返回false,您可以调用File.Create,因为您可能会遇到IOException(文件已存在,或其他错误)或更糟的情况;改写文件