C# 如何正确使用windows应用程序中存在的文件
我有一个带有“图像”文件夹的windows应用程序。我需要检查一个映像是否存在,它将在运行时检查。下面的代码是我所拥有的,但它总是返回falseC# 如何正确使用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;
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(文件已存在,或其他错误)或更糟的情况;改写文件