web-dev-qa-db-ja.com

ファイルがC#に存在するかどうかを確認する

私はアプリケーションに取り組んでいます。そのアプリケーションはユーザーから履歴書を取得する必要があるため、ファイルが存在するかどうかを確認するコードが必要です。

ASP.NET/C#を使用しています。

25
suresh

System.IO名前空間のExistsクラスのFileメソッドを使用して、指定したファイルが存在するかどうかを判断できます。

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

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

.NETにファイルが存在するかどうかをテストするには、次を使用できます。

System.IO.File.Exists (String)
14
James Ogden
    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> 
      }

画像を表示する前に存在するかどうかを確認するために、このようなことをしました。

8
Eric Bishard

これを試して:

     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));
            }
        }
3
Jmocke

簡単な答えは、できないということです-自分のマシン上のファイルをASP Webサイトからチェックすることはできません。そうすることは彼らにとって危険なリスクです。

それらにファイルのアップロード制御を与える必要があります-そして、その制御でできることはあまりありません。セキュリティ上の理由から、javascriptは実際にはそれに触れることができません。

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

次に、アップロードするファイルを選択します。サーバー側に送信される可能性のある空のファイルを処理する必要があります。

3
Keith

まだコメントできませんが、 erikkallen に同意しない/明確にしたかっただけです。

説明した状況で例外をキャッチするだけではいけません。ファイルがそこにあるはずで、何らかのexceptionalのケースのために知っていた場合、そうではなかったので、単にアクセスしようとするのは許容できるでしょうファイルし、発生した例外をキャッチします。

ただし、この場合、ユーザーからの入力を受け取り、ファイルが存在すると信じる理由はほとんどありません。ここでは、常にFile.Exists()を使用する必要があります。

私はそれが決まり文句であることを知っていますが、例外は例外的なイベントに対してのみ使用し、アプリケーションの通常のフローの一部として使用するべきではありません。高価であり、コードの読み取り/追跡がより困難になります。

2
Todd Friedlich

次を使用できます。

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

File.Exists()を使用することに加えて、ファイルを使用して、スローされた例外をキャッチすることをお勧めします。ファイルは、存在しない以外の理由で開くことができない場合があります。

1
erikkallen

これらの回答はすべて、チェックするファイルがサーバー側にあることを前提としています。残念ながら、クライアント側にファイルが存在することを保証する鋳鉄の方法はありません(たとえば、履歴書をアップロードする場合)。確かに、Javascriptでそれを行うことはできますが、サーバー側で100%確信することはまだできません。

私の意見では、これを処理する最善の方法は、ユーザーが実際にアップロードに適したファイルを選択すると仮定し、アップロードされたファイルが期待どおりであることを確認するために必要な作業を行うことです(ヒント-ユーザーを想定彼/彼女の入力でシステムをあらゆる方法で中毒しようとしています)

1
ZombieSheep

Asp.netを作成しました-ファイルをアップロードしようとしていますか?
HTMLを使用できる場合

<input type = "file" ...

1
Dror

私はこのコードを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

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

これはあなたを助けるかもしれません。

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; }
0
Deekshit Kumar