在 C# 中验证文件是不是存在

Posted

技术标签:

【中文标题】在 C# 中验证文件是不是存在【英文标题】:Verify if file exists or not in C#在 C# 中验证文件是否存在 【发布时间】:2010-09-29 18:43:34 【问题描述】:

我正在开发一个应用程序。该应用程序应该从用户那里获取简历,因此我需要一个代码来验证文件是否存在。

我正在使用 ASP.NET / C#。

【问题讨论】:

@suresh -- 在 *** 上,当您看到一个您认为可以充分回答您的查询并且是最好的答案时,您应该正确地尊重它... 我认为这个问题实际上是 - “我怎么知道用户从网络表单上传的文件已经存在于服务器上。” 不知道为什么它得到 8点赞。 【参考方案1】:

可以使用System.IO命名空间中File类的Exists方法判断指定文件是否存在:

bool System.IO.File.Exists(string path)

您可以找到documentation here on MSDN。

示例:

using System;
using System.IO;

class Test

    public static void Main()
    
        string resumeFile = @"c:\ResumesArchive\923823.txt";
        string newFile = @"c:\ResumesImport\newResume.txt";
        if (File.Exists(resumeFile))
        
            File.Copy(resumeFile, newFile);
        
        else
        
            Console.WriteLine("Resume file does not exist.");
        
    

【讨论】:

我怎样才能得到选择的文件路径..? “选定路径”是什么意思?有 Server.MapPath(SOME_VIRTUAL_PATH)。见这里:***.com/questions/275781/… @suresh -- 在 .NET 中,始终使用完整的文件路径字符串是最简单的。 System.IO.Path 中有一个静态 .NET 类,如果需要(用于扩展名、目录和文件名组件等),您可以使用它来拆分 FilePath 字符串,并且它知道 Microsoft 应用程序如何处理文件操作。 splattne 的回答会解决您最初的问题……我建议您“接受他的回答”。至于您对上述问题的关注-“如何获取选定的文件路径”...请参阅我的下一个条目。 @suresh -- 当你问如何“获取选定的文件路径”时,这个问题似乎暗示你知道一个在哪里并且它实际上被选中,可能在你应用程序的一个控件中'正在处理诸如 ComboBox 的下拉列表。如果这就是你的意思,你需要更具体——有很多不同的范式。 *** 有无数非常技术性的用户,我们都是同行......请准确,在发布之前重新阅读,并验证您的问题是否可以理解。还要确保我们知道您在寻找什么,以便我们可以提供给您。 @JimLahman 实际上是相反的:普通的 C# 字符串被转义,这意味着 e. G。 \n 将成为换行符。带有@的字符串被解释为未转义(\n 将被打印为 \ 和 n)【参考方案2】:

要测试.NET中是否存在文件,可以使用

System.IO.File.Exists (String)

【讨论】:

【参考方案3】:
    if (File.Exists(Server.MapPath("~/Images/associates/" + html.DisplayFor(modelItem => item.AssociateImage)))) 
       
        <img src="~/Images/associates/@Html.DisplayFor(modelItem => item.AssociateImage)"> 
      
        else 
       
        <h5>No image available</h5> 
      

我做了这样的事情来检查图像是否存在,然后再显示它。

【讨论】:

【参考方案4】:

试试这个:

     string fileName = "6d294041-34d1-4c66-a04c-261a6d9aee17.jpeg";

     string deletePath= "/images/uploads/";

     if (!string.IsNullOrEmpty(fileName ))
        
            // Append the name of the file to previous image.
            deletePath += fileName ;

            if (File.Exists(HttpContext.Current.Server.MapPath(deletePath)))
            
                // deletevprevious image
                File.Delete(HttpContext.Current.Server.MapPath(deletePath));
            
        

【讨论】:

【参考方案5】:

简单的答案是您不能 - 您将无法从 ASP 网站检查他们机器上的文件,因为这样做会对他们造成危险的风险。

你必须给他们一个文件上传控制——你可以用这个控制做的不多。出于安全原因,javascript 无法真正触及它。

<asp:FileUpload ID="FileUpload1" runat="server" />

然后他们选择要上传的文件,您必须处理他们可能发送到服务器端的任何空文件。

【讨论】:

【参考方案6】:

你可以使用:

System.IO.File.Exists(@"c:\temp\test.txt");

【讨论】:

【参考方案7】:

还不能发表评论,但我只是想不同意/澄清erikkallen。

您不应该只在您描述的情况下捕获异常。如果您知道该文件应该在那里并且由于某些异常 情况,它不是,那么尝试访问该文件并捕获发生的任何异常是可以接受的。

但是,在这种情况下,您正在接收来自用户的输入,并且没有理由相信该文件存在。在这里你应该总是使用 File.Exists()。

我知道这是陈词滥调,但您应该只将异常用于异常事件,而不是作为应用程序正常流程的一部分。它很昂贵,并且使代码更难以阅读/遵循。

【讨论】:

我完全同意你的看法!但是,如果您查看一些像 .Net 或 Java 这样的框架,就会倾向于认为它计划将异常用作正常的程序流东西(我不知道糟糕的性能如何适应这个概念!)【参考方案8】:

这些答案都假设您正在检查的文件位于服务器端。不幸的是,没有铸铁方法可以确保文件存在于客户端(例如,如果您正在上传简历)。当然,你可以在 Javascript 中做到这一点,但在服务器端你仍然不能 100% 确定。

在我看来,处理这个问题的最好方法是假设用户实际上会选择一个合适的文件进行上传,然后做任何你需要做的工作来确保上传的文件是你期望的(提示 -假设用户试图用他/她的输入以各种可能的方式毒化你的系统)

【讨论】:

【参考方案9】:

您编写了 asp.net - 您要上传文件吗? 如果是这样,您可以使用 html

【讨论】:

【参考方案10】:

除了使用File.Exists(),您最好尝试使用该文件并捕获任何抛出的异常。文件可能因为不存在而无法打开。

【讨论】:

【参考方案11】:

这可能会对你有所帮助。

try
   
       con.Open();
       if ((fileUpload1.PostedFile != null) && (fileUpload1.PostedFile.ContentLength > 0))
       
           filename = System.IO.Path.GetFileName(fileUpload1.PostedFile.FileName);
           ext = System.IO.Path.GetExtension(filename).ToLower();
           string str=@"/Resumes/" + filename;
           saveloc = (Server.MapPath(".") + str);
           string[] exts =  ".doc", ".docx", ".pdf", ".rtf" ;
           for (int i = 0; i < exts.Length; i++)
           
               if (ext == exts[i])
                   fileok = true;
           
           if (fileok)
           
               if (File.Exists(saveloc))
                   throw new Exception(Label1.Text="File exists!!!");
               fileUpload1.PostedFile.SaveAs(saveloc);
               cmd = new SqlCommand("insert into candidate values('" + candidatename + "','" + candidatemail + "','" + candidatemobile + "','" + filename + "','" + str + "')", con);
               cmd.ExecuteNonQuery();
               Label1.Text = "Upload Successful!!!";
               Label1.ForeColor = System.Drawing.Color.Blue;
               con.Close();
           
           else
           
               Label1.Text = "Upload not successful!!!";
               Label1.ForeColor = System.Drawing.Color.Red;
           
       

    
   catch (Exception ee)  Label1.Text = ee.Message; 

【讨论】:

【参考方案12】:

我已经在 vb 中编写了这段代码,它可以很好地检查文件是否存在以进行文件上传控制。试试看

对于 VB 代码 =============

    If FileUpload1.HasFile = True Then
        Dim FileExtension As String = System.IO.Path.GetExtension(FileUpload1.FileName)

        If FileExtension.ToLower <> ".jpg" Then
            lblMessage.ForeColor = System.Drawing.Color.Red
            lblMessage.Text = "Please select .jpg image file to upload"
        Else
            Dim FileSize As Integer = FileUpload1.PostedFile.ContentLength

            If FileSize > 1048576 Then
                lblMessage.ForeColor = System.Drawing.Color.Red
                lblMessage.Text = "File size (1MB) exceeded"
            Else
                Dim FileName As String = System.IO.Path.GetFileName(FileUpload1.FileName)

                Dim ServerFileName As String = Server.MapPath("~/Images/Folder1/" + FileName)

                If System.IO.File.Exists(ServerFileName) = False Then
                    FileUpload1.SaveAs(Server.MapPath("~/Images/Folder1/") + FileUpload1.FileName)
                    lblMessage.ForeColor = System.Drawing.Color.Green
                    lblMessage.Text = "File : " + FileUpload1.FileName + " uploaded successfully"
                Else
                    lblMessage.ForeColor = System.Drawing.Color.Red
                    lblMessage.Text = "File : " + FileName.ToString() + " already exsist"
                End If
            End If
        End If
    Else
        lblMessage.ForeColor = System.Drawing.Color.Red
        lblMessage.Text = "Please select a file to upload"
    End If

对于 C# 代码 =======================

if (FileUpload1.HasFile == true) 
    string FileExtension = System.IO.Path.GetExtension(FileUpload1.FileName);

    if (FileExtension.ToLower != ".jpg") 
        lblMessage.ForeColor = System.Drawing.Color.Red;
        lblMessage.Text = "Please select .jpg image file to upload";
     else 
        int FileSize = FileUpload1.PostedFile.ContentLength;

        if (FileSize > 1048576) 
            lblMessage.ForeColor = System.Drawing.Color.Red;
            lblMessage.Text = "File size (1MB) exceeded";
         else 
            string FileName = System.IO.Path.GetFileName(FileUpload1.FileName);

            string ServerFileName = Server.MapPath("~/Images/Folder1/" + FileName);

            if (System.IO.File.Exists(ServerFileName) == false) 
                FileUpload1.SaveAs(Server.MapPath("~/Images/Folder1/") + FileUpload1.FileName);
                lblMessage.ForeColor = System.Drawing.Color.Green;
                lblMessage.Text = "File : " + FileUpload1.FileName + " uploaded successfully";
             else 
                lblMessage.ForeColor = System.Drawing.Color.Red;
                lblMessage.Text = "File : " + FileName.ToString() + " already exsist";
            
        
    
 else 
    lblMessage.ForeColor = System.Drawing.Color.Red;
    lblMessage.Text = "Please select a file to upload";

【讨论】:

以上是关于在 C# 中验证文件是不是存在的主要内容,如果未能解决你的问题,请参考以下文章

在C#中如何判断一个文件是不是存在?请各位告知下,越详细越好。

如何在 C# 中的 WinRAR、7Zip、Zip、Tar、Winzip 中检查文件是不是存在

c#中如何检测文件路径是不是存在

如何验证批处理文件中是不是存在文件?

如何找出 C# / .NET 中是不是存在文件?

通过文件夹名称检查 Google Drive 中是不是存在文件夹(C#)