Cara menghapus file setelah memeriksa apakah ada


220

Bagaimana saya bisa menghapus file dalam C # misalnya C:\test.txt, meskipun menerapkan metode yang sama seperti dalam file batch misalnya

if exist "C:\test.txt"

delete "C:\test.txt"

else 

return nothing (ignore)

Jawaban:


388

Ini cukup mudah menggunakan kelas File .

if(File.Exists(@"C:\test.txt"))
{
    File.Delete(@"C:\test.txt");
}


Seperti yang ditunjukkan Chris dalam komentar, Anda sebenarnya tidak perlu melakukan File.Existspemeriksaan karena File.Deletetidak ada pengecualian jika file tersebut tidak ada, meskipun jika Anda menggunakan jalur absolut, Anda akan memerlukan pemeriksaan untuk memastikan seluruh jalur file valid.


13
Tes itu sebenarnya tidak diperlukan. Lihat posting saya.
Chris Eberle

20
Tes ini diperlukan jika Anda ingin mencegah kemungkinan DirectoryNotFoundException.
Timothy Strimple

7
Tes tidak boleh digunakan sebagai pengganti penanganan tho, melainkan dalam konduksi dengannya. Sejumlah skenario dapat menghasilkan cek yang ada yang mengembalikan true dan Delete throwing.
Josh

1
Kenapa ada @sebelum path file? Bagi saya itu bekerja tanpa.
Pascal Ackermann

5
@ membuat Anda tidak perlu menggandakan backslash.
PRMan

105

Gunakan System.IO.File.Delete seperti itu:

System.IO.File.Delete(@"C:\test.txt")

Dari dokumentasi:

Jika file yang akan dihapus tidak ada, tidak ada pengecualian yang dilemparkan.


7
Itu akan melempar DirectoryNotFoundException jika "Path yang ditentukan tidak valid (misalnya, itu pada drive yang tidak dipetakan)."
Timothy Strimple

5
Aneh sekali. Intellisense berkata An exception is thrown if the specified file does not exist.
fearofawhackplanet

Mungkin Anda menggunakan versi lain dari .NET framework?
Chris Eberle

1
Saya menggunakan .Net4, sepertinya intellisense salah. Saya telah menjalankan pemeriksaan dan tidak ada pengecualian yang dilemparkan
fearofawhackplanet

3
Ya saya sudah mencoba dan System.IO.File.Delete(@"C:\test.txt");sudah cukup. Terima kasih
Berkay Turancı

33

Anda dapat mengimpor System.IOnamespace menggunakan:

using System.IO;

Jika filepath mewakili path lengkap ke file, Anda dapat memeriksa keberadaannya dan menghapusnya sebagai berikut:

if(File.Exists(filepath))
{
     try
    {
         File.Delete(filepath);
    } 
    catch(Exception ex)
    {
      //Do something
    } 
}  

2
Mengapa tidak hanya mengeluarkan panggilan Hapus tanpa memperhatikan dan menangkap pengecualian yang menunjukkan bahwa file tersebut tidak ada?
antred

32
if (System.IO.File.Exists(@"C:\test.txt"))
    System.IO.File.Delete(@"C:\test.txt"));

tapi

System.IO.File.Delete(@"C:\test.txt");

akan melakukan hal yang sama selama folder tersebut ada.


23

Jika Anda ingin menghindari, DirectoryNotFoundExceptionAnda harus memastikan bahwa direktori file tersebut memang ada. File.Existsmenyelesaikan ini. Cara lain adalah dengan memanfaatkan Pathdan Directorykelas utilitas seperti:

string file = @"C:\subfolder\test.txt";
if (Directory.Exists(Path.GetDirectoryName(file)))
{
    File.Delete(file);
}

15
  if (System.IO.File.Exists(@"C:\Users\Public\DeleteTest\test.txt"))
    {
        // Use a try block to catch IOExceptions, to 
        // handle the case of the file already being 
        // opened by another process. 
        try
        {
            System.IO.File.Delete(@"C:\Users\Public\DeleteTest\test.txt");
        }
        catch (System.IO.IOException e)
        {
            Console.WriteLine(e.Message);
            return;
        }
    }


1

Jika Anda membaca dari file itu menggunakan FileStream dan kemudian ingin menghapusnya, pastikan Anda menutup FileStream sebelum Anda memanggil File.Delete (path). Saya punya masalah ini.

var filestream = new System.IO.FileStream(@"C:\Test\PutInv.txt", System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite);
filestream.Close();
File.Delete(@"C:\Test\PutInv.txt");

Atau gunakan usingpernyataan, di mana File.Delete()akan keluar kurung. Dalam contoh yang Anda miliki, Anda juga harus melakukan a filestream.Dispose();.
vapcguy

1

Terkadang Anda ingin menghapus file apa pun masalahnya (apa pun pengecualian terjadi, harap hapus file itu). Untuk situasi seperti itu.

public static void DeleteFile(string path)
        {
            if (!File.Exists(path))
            {
                return;
            }

            bool isDeleted = false;
            while (!isDeleted)
            {
                try
                {
                    File.Delete(path);
                    isDeleted = true;
                }
                catch (Exception e)
                {
                }
                Thread.Sleep(50);
            }
        }

Catatan: Pengecualian tidak dilakukan jika file yang ditentukan tidak ada.


10
Jadi, Anda mencoba menghapus file 20 kali per detik sampai dihapus. Bagaimana jika, karena suatu alasan, file tidak dapat dihapus dan program akan mencoba menghapusnya selamanya? Saya rasa ini bukan solusi yang baik.
kv1dr

2
Paling tidak, Anda harus memberikan parameter batas waktu.
antred

@ kv1dr benar. Saya pikir Anda harus mencoba untuk waktu yang terbatas dan mengembalikan pesan kegagalan jika file tidak dihapus.
QMaster

0

Ini akan menjadi cara paling sederhana,

if (System.IO.File.Exists(filePath)) 
{
  System.IO.File.Delete(filePath);
  System.Threading.Thread.Sleep(20);
}

Thread.sleep akan membantu untuk bekerja dengan sempurna, jika tidak, itu akan mempengaruhi langkah selanjutnya jika kita melakukan menyalin atau menulis file.

Cara lain yang saya lakukan adalah,

if (System.IO.File.Exists(filePath))
{
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
System.IO.File.Delete(filePath);
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.