使用相对路径检查文件是否存在

log*_*eks 18 c#

使用相对路径检查文件是否存在的最佳方法是什么.

我使用了以下方法,但尽管文件存在,它仍然返回false.

 bool a = File.Exists("/images/Customswipe_a.png");
Run Code Online (Sandbox Code Playgroud)

Mik*_*ark 12

那不是一条相对的道路.你需要先离开第一个,/否则它将被解释为root(即C:/ images ......)

  • 它在技术上是相对路径,仅相对于当前驱动器. (8认同)
  • @AlexeiLevenkov也许从技术上讲,是的。但是,如果绝对路径和相对路径都相对于某种事物,为什么还要区分它们呢? (2认同)

pkm*_*iec 7

我猜你是在asp.net应用程序中运行这段代码,这就是你弄错的原因.

在asp.net中,您应该使用Server.MapPath("/images/Customswipe_a.png")获取"正确"路径(相对于Web应用程序根目录).否则,您将获得Web服务器可执行文件的本地路径(IIS/WEBDAV/..其他任何名称).


jac*_*jac 5

相对路径是相对于当前工作目录的。它可能不是应用程序目录。调用GetCurrentDirectory()来检查您正在测试的实际路径。


zah*_*hir 5

您只需要定义您的文件相对于什么

  • 您的应用程序主组件?
  • 当前目录?
  • 应用程序数据目录?
  • 命名它...

在每种情况下,我建议您通过以下Path.Combine方法将其转换为绝对路径:

public static readonly string AppRoot = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

...

//calling with a '/' heading makes the path absolute so I removed it
var fullPath = Path.Combine(AppRoot, "images/Customswipe_a.png");
var exists = File.Exists(fullPath);
Run Code Online (Sandbox Code Playgroud)

这样您就可以保证您正在寻找的地方。甚至“打开/保存文件”对话框也可能会更改您当前的目录。因此,File.Exists没有完整路径的调用通常是一个错误的决定。