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

时间:2009-01-06 09:54:24

标签: c# asp.net file-exists

我正在处理一个应用程序。该应用程序应该从用户那里获得简历,这样我就需要一个代码来验证文件是否存在。

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

12 个答案:

答案 0 :(得分:66)

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

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.");
        }
    }
}

答案 1 :(得分:14)

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

System.IO.File.Exists (String)

答案 2 :(得分:7)

    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> 
      }

我做了类似的事情,以便在显示之前检查图像是否存在。

答案 3 :(得分:3)

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

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

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

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

答案 4 :(得分:3)

试试这个:

     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 :(得分:2)

您可以使用:

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

答案 6 :(得分:2)

无法发表评论,但我只是想与erikkallen不同意/澄清。

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

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

我知道这是陈词滥调,但您应该只对例外事件使用例外,而不是应用程序的正常流程。它很昂贵,使代码更难以阅读/遵循。

答案 7 :(得分:1)

除了使用File.Exists()之外,您最好只是尝试使用该文件并捕获引发的任何异常。由于存在其他问题,该文件无法打开。

答案 8 :(得分:1)

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

在我看来,处理此问题的最佳方法是假设用户实际上会选择适当的文件进行上传,然后执行您需要做的任何工作以确保上传的文件符合您的预期(提示 - 假设用户试图通过他/她的输入以各种可能的方式毒害你的系统

答案 9 :(得分:1)

你写了asp.net - 你想上传文件吗? 如果是这样,你可以使用HTML

  

&lt; input type =“file”...

答案 10 :(得分:0)

这可能会对你有帮助。

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; }

答案 11 :(得分:0)

我已经在vb中编写了这段代码,并且它可以正常工作以检查文件存在与否的天气以进行文件上载控制。试试吧

FOR VB CODE ============

    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

FOR C#CODE ======================

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";
}