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)
Tom
sumber

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.

Adam Lear
sumber
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.

Chris Eberle
sumber
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
    } 
}  
mishel vettukattil
sumber
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.

Vercas
sumber
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);
}
Derek W
sumber
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;
        }
    }
Ahmed Ghazey
sumber
11
if (File.Exists(path))
{
    File.Delete(path);
}
ecMode
sumber
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");
ag93
sumber
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.

Syed Hameed
sumber
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);
}
Aniyan Kolathur
sumber