文件存在,但 File.Exists(file) 返回 false。

3

我在一个控制器中添加了一个文件,在另一个控制器中,我想要检查该文件是否存在。我使用 File.Exist(file),但它总是返回false,即使文件已存在...

我成功地添加了文件和图片。

if ((image!= null & image.ContentLength > 0))
                    {
                        string name = event.EventId.ToString() + ".jpg";

                        var fileName = name;
                        var path = Path.Combine(Server.MapPath("~/App_Data/Plakaty"), fileName);
                        plakat.SaveAs(path);
                    }

我正在另一个控制器中检查此文件是否存在:

string file = "~/App_Data/Plakaty/" + wyd.EventId.ToString() + ".jpg";

            ViewBag.file_exist = System.IO.File.Exists(file); //always is false

我的看法是:(它只返回“没有文件”)
 @if (ViewBag.file_exist == true)
        {
            <p>File exist</p>
        }
        else
        {
            <p>No file</p>
        }

5
你在另一个控制器中没有调用Server.MapPath - 这是否意味着你文件的路径不正确? - Charleh
@Charleh:我认为你应该把这个发表为答案。 - Daniel Hilgarth
奥巴马需要这些分数 :) - Charleh
@Charleh 不不,我没有看到你的评论,抱歉 :) - Obama
3个回答

7

在检查文件时,您需要再次使用 Server.MapPath 并进行正斜杠处理。

string file = Server.MapPath("~") + @"\App_Data\Plakaty\" 
    + wyd.EventId.ToString() + ".jpg";

ViewBag.file_exist = System.IO.File.Exists(file ); //always is false

你确定要使用正斜杠吗?据我所知,WinApi 在大多数情况下也可以处理 / - Sebastian

2

在检查文件是否存在时,您忘记写 Server.MapPath


1

你检查过权限了吗?

如果在尝试确定指定文件是否存在时发生任何错误,Exists方法将返回false。这可能发生在引发异常的情况下,例如传递具有无效字符或太多字符的文件名,磁盘失败或丢失,或者调用者没有读取文件的权限。请参阅文档

然而,最有可能的是@Obama所说的路径错误,因为您没有调用Server.MapPath。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接