কোনও ফাইল বিদ্যমান আছে কিনা তা যাচাই করার পরে কীভাবে মুছবেন


219

আমি কীভাবে সি # তে কোনও ফাইল মুছতে পারি C:\test.txt, যদিও একই ধরণের পদ্ধতি যেমন ব্যাচের ফাইলগুলিতে প্রয়োগ করতে হয়

if exist "C:\test.txt"

delete "C:\test.txt"

else 

return nothing (ignore)

উত্তর:


387

ফাইল ক্লাসটি ব্যবহার করে এটি বেশ সোজা ।

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


হিসাবে ক্রিস মন্তব্য নির্দিষ্ট, আপনি আসলে কি করতে প্রয়োজন হবে না File.Existsচেক থেকে File.Delete, যদিও আপনি পরম পাথ ব্যবহার করছেন যদি আপনি নিশ্চিত করার জন্য চেক করতে হবে, যদি ফাইল উপস্থিত না থাকলে একটি ব্যতিক্রম নিক্ষেপ না পুরো ফাইল পাথ বৈধ।


13
সেই পরীক্ষার আসলে দরকার নেই। আমার পোস্ট দেখুন।
ক্রিস ইবারল

20
আপনি যদি কোনও সম্ভাব্য ডিরেক্টরিনাটফাউন্ডএক্সসেপশন আটকাতে চান তবে পরীক্ষাটি প্রয়োজনীয়।
টিমোথি স্ট্রিম্পল

7
পরীক্ষাটি ব্যতিক্রম হ্যান্ডলিংয়ের পরিবর্তে ব্যবহার করা উচিত নয়, বরং এটি চালনার ক্ষেত্রে। যে কোনও সংখ্যক দৃশ্যের ফলে বিদ্যমান চেকটি সত্য হয়ে যায় এবং নিক্ষেপ করা মুছতে পারে।
জোশ

1
@ফাইল পাথের আগে কেন আছে ? আমার জন্য এটি ছাড়া কাজ করে।
পাস্কেল অ্যাকারম্যান

5
@ ব্যাকস্ল্যাশগুলি দ্বিগুণ করা থেকে বিরত রাখে।
PRMan

105

System.IO.File.Delete এর মতো ব্যবহার করুন :

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

ডকুমেন্টেশন থেকে:

যদি মুছে ফেলা ফাইলটির অস্তিত্ব না থাকে তবে কোনও ব্যতিক্রম ছুঁড়ে দেওয়া হবে না।


7
"নির্দিষ্ট পথটি অবৈধ হলে (উদাহরণস্বরূপ, এটি একটি মোড়বিহীন ড্রাইভে রয়েছে) যদি এটি একটি ডিরেক্টরি নটফাউন্ডএক্সসেপশন ফেলে দেয়।"
টিমোথি স্ট্রিম্পল

5
কি অদ্ভুত. ইন্টেলিজেন্স বলে An exception is thrown if the specified file does not exist
fearofawhackplanet

সম্ভবত আপনি .NET ফ্রেমওয়ার্কের একটি আলাদা সংস্করণ ব্যবহার করছেন?
ক্রিস এবারেল

1
আমি। নেট 4 ব্যবহার করছি, দেখে মনে হচ্ছে ইন্টেলিজেন্স ভুল হয়েছে আমি একটি চেক
চালিয়েছি

3
হ্যাঁ আমি চেষ্টা করেছি এবং কেবল System.IO.File.Delete(@"C:\test.txt");যথেষ্ট। ধন্যবাদ
বার্কে তুরানসেকে

33

আপনি System.IOব্যবহার করে নেমস্পেসটি আমদানি করতে পারেন :

using System.IO;

যদি ফাইলপথ ফাইলটির পুরো পথটি উপস্থাপন করে তবে আপনি এর অস্তিত্বটি পরীক্ষা করতে পারেন এবং নীচে এটি মুছতে পারেন:

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

2
কেন কেবল মুছুন কলটি ইস্যু না করেই এবং কোনও ব্যতিক্রম ধরা না যা ইঙ্গিত দেয় যে ফাইলটির অস্তিত্ব ছিল না?

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

কিন্তু

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

ফোল্ডারটি বিদ্যমান থাকাকালীন একই কাজ করবে।


23

আপনি যদি এড়াতে চান তবে আপনাকে DirectoryNotFoundExceptionঅবশ্যই নিশ্চিত করতে হবে যে ফাইলটির ডিরেক্টরি প্রকৃতপক্ষে রয়েছে। File.Existsএটি সম্পাদন করে আর একটি উপায় হ'ল এর মতো Pathএবং Directoryইউটিলিটি ক্লাসগুলি ব্যবহার করা :

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

আপনি যদি ফাইলটি স্ট্রিম ব্যবহার করে সেই ফাইলটি পড়ছেন এবং তারপরে এটি মুছতে চান তবে ফাইলটি ডিলিট (পথ) কল করার আগে আপনি ফাইল স্ট্রিমটি বন্ধ করে রেখেছেন তা নিশ্চিত করুন। আমার এই সমস্যা ছিল।

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

অথবা একটি usingবিবৃতি ব্যবহার করুন , যেখানে File.Delete()বন্ধনীগুলির বাইরে যাবে। উদাহরণস্বরূপ, আপনারও একটি করা উচিত filestream.Dispose();
vapcguy

1

কখনও কখনও আপনি যে কোনও ফাইল ফাইল মুছতে চান (যেটি ব্যতিক্রম যাই ঘটুক না কেন, ফাইলটি মুছুন না)। এই ধরনের পরিস্থিতিতে।

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

দ্রষ্টব্য: নির্দিষ্ট ফাইলটি উপস্থিত না থাকলে একটি ব্যতিক্রম ছুঁড়ে দেওয়া হবে না।


10
সুতরাং আপনি ফাইলটি মুছে না দেওয়া পর্যন্ত প্রতি সেকেন্ডে 20 বার মুছতে চেষ্টা করছেন। যদি কোনও কারণে ফাইলটি মোছা যায় না এবং প্রোগ্রামটি চিরতরে মোছার চেষ্টা করবে? আমি মনে করি না এটি ভাল সমাধান।
কেভি

2
খুব কমপক্ষে, আপনার একটি সময়সীমা পরামিতি সরবরাহ করা উচিত।
23:14 '

@ কেভি 1 ডিআর ঠিক আছে। আমি মনে করি আপনার সীমাবদ্ধ সময়ের জন্য চেষ্টা করা উচিত এবং যদি ফাইলটি মোছা না করা হয় তবে একটি ব্যর্থতা বার্তাটি ফিরিয়ে দেওয়া উচিত।
কিউমাস্টার

0

এটি হবে সহজতম উপায়,

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

Thread.sleep নিখুঁতভাবে কাজ করতে সহায়তা করবে, অন্যথায়, আমরা যদি ফাইলটি অনুলিপি করি বা লিখি তবে এটি পরবর্তী পদক্ষেপে প্রভাব ফেলবে।

আরেকটি উপায় আমি করেছি,

if (System.IO.File.Exists(filePath))
{
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
System.IO.File.Delete(filePath);
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.