【问题标题】:Verify if file exists or not in C#在 C# 中验证文件是否存在
【发布时间】:2023-04-08 15:49:01
【问题描述】:

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

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

【问题讨论】:

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

标签: c# asp.net file-exists


【解决方案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)。见这里:stackoverflow.com/questions/275781/…
  • @suresh -- 在 .NET 中,始终使用完整的文件路径字符串是最简单的。 System.IO.Path 中有一个静态 .NET 类,如果需要(用于扩展名、目录和文件名组件等),您可以使用它来拆分 FilePath 字符串,并且它知道 Microsoft 应用程序如何处理文件操作。 splattne 的回答会解决您最初的问题……我建议您“接受他的回答”。至于您对上述问题的关注-“如何获取选定的文件路径”...请参阅我的下一个条目。
  • @suresh -- 当你问如何“获取选定的文件路径”时,这个问题似乎暗示你知道一个在哪里并且它实际上被选中,可能在你应用程序的一个控件中'正在处理诸如 ComboBox 的下拉列表。如果这就是你的意思,你需要更具体——有很多不同的范式。 StackOverflow 有无数非常技术性的用户,我们都是同行......请准确,在发布之前重新阅读,并验证您的问题是否可以理解。还要确保我们知道您在寻找什么,以便我们可以提供给您。
  • @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";
                    }
                    

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2021-07-23
                      • 2014-02-01
                      • 2019-12-26
                      • 2011-01-12
                      • 2011-03-04
                      • 1970-01-01
                      • 1970-01-01
                      相关资源
                      最近更新 更多