ভিবিএতে একটি ফাইল মোছা হচ্ছে


121

ভিবিএ ব্যবহার করে, আমি কীভাবে পারি:

  1. কোনও ফাইল বিদ্যমান আছে কিনা তা পরীক্ষা করে দেখুন এবং যদি তাই হয়,
  2. মুছে ফেল?

উত্তর:


168

1.) এখানে চেক করুন । মূলত এটি করুন:

Function FileExists(ByVal FileToTest As String) As Boolean
   FileExists = (Dir(FileToTest) <> "")
End Function

বিভিন্ন ত্রুটি পরিচালনার প্রয়োজনীয়তা খুঁজে বের করার জন্য আমি এটি আপনার কাছে ছেড়ে দিচ্ছি তবে এগুলি আমি বিবেচনা করব এমন ত্রুটি পরিচালনার মধ্যে একটি:

  • একটি খালি স্ট্রিং পাস করার জন্য পরীক্ষা করুন।
  • কোনও ফাইলের নাম / পথে অবৈধ অক্ষরযুক্ত একটি স্ট্রিং পরীক্ষা করুন

২) কিভাবে একটি ফাইল মুছবেন। তাকান করেছেন। মূলত কিল কমান্ডটি ব্যবহার করুন তবে আপনাকে কেবল ফাইলটি পঠনযোগ্য হওয়ার সম্ভাবনা দেওয়া দরকার। আপনার জন্য এখানে একটি ফাংশন রয়েছে:

Sub DeleteFile(ByVal FileToDelete As String)
   If FileExists(FileToDelete) Then 'See above          
      ' First remove readonly attribute, if set
      SetAttr FileToDelete, vbNormal          
      ' Then delete the file
      Kill FileToDelete
   End If
End Sub

আবার, আমি ত্রুটিটি আপনার কাছে পরিচালনা করব এবং এগুলিই আমি বিবেচনা করব:

  • ডিরেক্টরি বনাম কোনও ফাইলের জন্য এটি কি আলাদা আচরণ করা উচিত? কোনও ব্যবহারকারীকে স্পষ্টভাবে নির্দেশ করতে হবে যে তারা কোনও ডিরেক্টরি মুছতে চান?

  • আপনি কি কোডটি কেবল পঠনযোগ্য অ্যাট্রিবিউটটি স্বয়ংক্রিয়ভাবে পুনরায় সেট করতে চান বা কেবলমাত্র পঠনযোগ্য বৈশিষ্ট্য সেট করা আছে তা ব্যবহারকারীকে কোনও প্রকারের ইঙ্গিত দেওয়া উচিত?


সম্পাদনা করুন: এই উত্তরটিকে সম্প্রদায় উইকি হিসাবে চিহ্নিত করা হচ্ছে যাতে প্রয়োজনে যে কেউ এটি পরিবর্তন করতে পারে।


আপনাকে ধন্যবাদ - যদি একই নামের দুটি ফাইল বিদ্যমান থাকে যা মুছে ফেলা সাব ফাইল উভয়কে বা কেবল একটিকে হত্যা করবে? কোন পরামর্শ অনেক প্রশংসা।
বিকেএসপুরগাঁও

6
ডিরেক্টরিতে আপনার একই নামের দুটি ফাইল থাকতে পারে না।
ওনোরিও ক্যাটানাচি

52

ব্রেটস্কির উত্তরের কোডের বিকল্প উপায়, যার সাথে আমি অন্যথায় পুরোপুরি একমত, হতে পারে

With New FileSystemObject
    If .FileExists(yourFilePath) Then
        .DeleteFile yourFilepath
    End If
End With

একই প্রভাব কিন্তু কম (ভাল, মোটেও কিছুই নয়) ভেরিয়েবল ঘোষণা rations

ফাইলসিস্টেমবজেক্টটি একটি সত্যিই দরকারী সরঞ্জাম এবং এর সাথে বন্ধুত্বপূর্ণ হওয়ার পক্ষে উপযুক্ত। অন্য কিছু বাদে, পাঠ্য ফাইল লেখার জন্য এটি কখনও কখনও উত্তরাধিকার বিকল্পের চেয়ে দ্রুততর হতে পারে যা কিছু লোককে অবাক করে দিতে পারে। (আমার অভিজ্ঞতায় কমপক্ষে, ওয়াইএমএমভি)।


7
একটি ফাইল স্ক্রিপ্টিং বস্তুর ঘোষণা ছাড়াই এই সিনট্যাক্স ব্যবহার করে, মাইক্রোসফট স্ক্রিপ্টিং রানটাইম জন্য রেফারেন্স যোগ করা আবশ্যক, অন্য: অস্পষ্ট হিসাবে নিউ Scripting.FileSystemObject FS
pghcpa

5
আপনাকে স্ক্রিপ্টিং গ্রন্থাগারটিও উল্লেখ করতে হবে। এখানে দেখুন: stackoverflow.com/questions/3233203/...
ekkis

যেহেতু কিছুই কিছুই সেট করার জন্য কোনও পরিবর্তনশীল নেই, তাই কোনও ঝুঁকি রয়েছে কি ফাইলসিসটেমবজেক্ট স্মৃতিতে থাকবে, যার ফলে কোনও ফুটো বা অন্যান্য সমস্যা দেখা দেবে?
জোহনি কেন

না, এটি "শেষ সহ" পরে বাতিল করা হবে। যেহেতু এটি কোনও ভেরিয়েবলের জন্য বরাদ্দ করা হয় না কারণ প্রভাবটি কোনও ভেরিয়েবলের জন্য বরাদ্দ করা অবজেক্টটির অনুরূপ যা "কিছুই না" সেট করা হয়েছে।
জনি

15

আমি সম্ভবত এটির জন্য ব্লেড হয়ে যাব, তবে আপনি যদি এটি মুছতে চলেছেন তবে অস্তিত্বের জন্য পরীক্ষা করার কী লাভ? আমার বড় পোষা প্রাণীগুলির মধ্যে একটি হল এমন একটি অ্যাপ্লিকেশন যা "ফাইলটি মুছতে পারে না, এটি বিদ্যমান নেই!" এর মতো কিছু দিয়ে ত্রুটিযুক্ত ডায়লগ ছুঁড়েছে!

On Error Resume Next
aFile = "c:\file_to_delete.txt"
Kill aFile
On Error Goto 0
return Len(Dir$(aFile)) > 0 ' Make sure it actually got deleted.

যদি ফাইলটি প্রথম স্থানে না থাকে তবে মিশনটি সম্পন্ন!


4
আপনি একটি ভাল বক্তব্য উত্থাপন করেন তবে বেশিরভাগ জিনিসের মতো, আমি মনে করি এটি প্রসঙ্গের উপর নির্ভর করে এবং কখনও কখনও "ফাইল অস্তিত্ব" ফাংশন মুছে ফেলা ছাড়াও সহজ।
ওনোরিও ক্যাটেনাচি

3
+1: সম্ভবত অ্যাপ্লিকেশনটির ব্যবহারকারী কোনও ফাইল অপসারণের আগে জিজ্ঞাসা করতে চায়: উদাহরণস্বরূপ, ব্যবহার ActiveWorkbook.SaveCopyAsওভাররাইট করতে সক্ষম হয় না, তাই আপনাকে প্রথমে একই ফাইলের নাম সহ বিদ্যমান ফাইলটি সরিয়ে ফেলতে হবে।
জোল

তবে আপনার কখনও ব্যবহার করা উচিত নয় On Error Resume Next, বা তাই আমাকে বলা হয়েছে: ডি অবশ্যই, এটি হাস্যকর পরামর্শ এবং আপনার উত্তরটি সঠিক is
জনী কেন

Len(dir(...))অংশ নিজেই অস্তিত্ব জন্য চেক করতে নয়। এছাড়া করা হয় ফাইলটি লুকানো হয় পরীক্ষণ কারণ একটি গোপন ফাইল একটি খালি স্ট্রিং এমনকি যদি এটি বিদ্যমান ফিরে আসবে (এবং আপনি এটি মুছে ফেলতে সক্ষম হবেন না): Dir(hiddenFile) = ""। সুতরাং, অংশটি আপনার পক্ষে SetAttr FileToDelete, vbNormalস্পষ্টভাবে এই যত্ন করে।
এলেক্রিটাকল এজে

11

নিম্নলিখিতটি কোনও ফাইলের অস্তিত্বের জন্য পরীক্ষা করতে, এবং তারপরে এটি মুছতে ব্যবহৃত হতে পারে।

Dim aFile As String
aFile = "c:\file_to_delete.txt"
If Len(Dir$(aFile)) > 0 Then
     Kill aFile
End If 

3
আমি জানি এই প্রশ্ন এবং প্রতিক্রিয়াটি পুরানো, কেবল ভেবেছি আমি স্ট্রিং পরীক্ষা করার জন্য লেন () ব্যবহার করে (এবং ফাংশনগুলি যে স্ট্রিংগুলি ফিরে আসে) ভিবিএতে আক্ষরিক স্ট্রিং তুলনার তুলনায় দ্রুত বলে মনে হয়।
জিমিপেনা

7
কারণ Len()(এবং LenB(), যা আরও দ্রুত হয়) দ্রুত স্ট্রিং তুলনা চেয়ে আছে মেমরি, ভিবি স্ট্রিং তাদের দৈর্ঘ্য পূর্বে হয়। লেন / লেনব কেবল সেই মেমরির অবস্থান থেকে দৈর্ঘ্যটি টানবে, তার দৈর্ঘ্য জানতে তাদের স্ট্রিং দিয়ে পুনরাবৃত্তি করতে হবে না। অন্যদিকে, স্ট্রিং তুলনা ব্যবহার করার আরও অনেক কাজ রয়েছে। অতিরিক্তভাবে, ""ভিবিতে ব্যবহার এড়াতে যেমন এটি সর্বদা একটি নতুন স্ট্রিং বরাদ্দ করে। vbNullStringপরিবর্তে এটি ব্যবহার করুন কারণ এটি একটি ধ্রুবক এবং আরও মেমরি ব্যবহার করে না।
রেনেউদ বোম্পুইস

7

ভিবিতে সাধারণত Dirএটি ফাইলের ডিরেক্টরি খুঁজে পাওয়া যায়। যদি এটি ফাঁকা না থাকে তবে এটি বিদ্যমান এবং তারপরে Killফাইলটি থেকে মুক্তি পেতে ব্যবহার করুন।

test = Dir(Filename)
If Not test = "" Then
    Kill (Filename)
End If

6

স্ক্রিপ্টিং -রুনটাইম লাইব্রেরিতে একটি রেফারেন্স সেট করুন এবং তারপরে ফাইলসিস্টেমঅবজেক্টটি ব্যবহার করুন:

Dim fso as New FileSystemObject, aFile as File

if (fso.FileExists("PathToFile")) then
    aFile = fso.GetFile("PathToFile")
    aFile.Delete
End if

আমি ফাইলসিস্টেমঅজেক্ট পদ্ধতিটিও ব্যবহার করি, কারণ কিল
ডায়ারাইটিস

এই পদ্ধতিটি আমি ব্যবহার করি .. যে কেউ এটি প্রয়োগ করে সে ত্রুটি যাচাই এবং প্রদর্শন অ্যালার্ট = মিথ্যা ব্যবহার করতে চায় use (ফাইলটি যদি ব্যবহার করা হয় তবে মুছে ফেলা হবে না, সুতরাং অবশ্যই ত্রুটির জাল থাকতে হবে)
গ্রেগ বার্নস

3

এখানে একটি পরামর্শ: আপনি কি ফাইলের নামটি পুনরায় ব্যবহার করছেন, বা এমন কিছু করার পরিকল্পনা করছেন যা অবিলম্বে মুছে ফেলার প্রয়োজন?

কোন?

/ এফ কম্যান্ড প্রম্প্ট থেকে: আপনি VBA কমান্ড del "\ TEMP \ scratchpad.txt সি" গুলি পেতে পারেন অ্যাসিঙ্ক্রোনাস VBA.Shell ব্যবহার করছে:

শেল "দেল" এবং chr (34) এবং স্ট্রপাথ এবং chr (34) এবং "/ এফ", ভিবিহাইড

ফাইলের নামটির চারপাশে ডাবল-কোটস (এএসসিআইআই অক্ষর 34) নোট করুন: আমি ধরে নিচ্ছি যে আপনি একটি নেটওয়ার্ক পাথ পেয়েছেন বা ফাঁকা স্থান সহ একটি দীর্ঘ ফাইলের নাম।

যদি এটি একটি বড় ফাইল, বা এটি ধীর নেটওয়ার্ক সংযোগে থাকে তবে আগুন এবং ভুলে যাওয়ার উপায়। অবশ্যই, আপনি কখনই এটি দেখতে পাচ্ছেন না এটি কাজ করে কি না; তবে আপনি তত্ক্ষণাত আপনার ভিবিএ পুনরায় চালু করুন এবং এমন সময় রয়েছে যখন এটি নেটওয়ার্কের জন্য অপেক্ষা করার চেয়ে ভাল।


এটি একটি দুর্দান্ত বিকল্প, যদি অ্যাসিঞ্চ আপনি যা চান তা হয়।
জোহনি কেন

2

আপনি স্ক্রিপ্টিং.রুনটাইম লাইব্রেরিতে একটি রেফারেন্স সেট করতে পারেন এবং তারপরে ফাইলসিস্টেমবজেক্টটি ব্যবহার করতে পারেন। এটিতে একটি মুছে ফেলা পদ্ধতি এবং একটি ফাইলএক্সিস্ট পদ্ধতি রয়েছে।

এমএসডিএন নিবন্ধটি এখানে দেখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.