নথি ডিরেক্টরি থেকে নির্দিষ্ট ফাইল মুছুন


111

আমি আমার অ্যাপ্লিকেশন নথি ডিরেক্টরি থেকে একটি চিত্র মুছতে চাই। আমি চিত্র মুছে ফেলতে কোড লিখেছি তা হ'ল:

 -(void)removeImage:(NSString *)fileName
{
    fileManager = [NSFileManager defaultManager];
    paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    documentsPath = [paths objectAtIndex:0];
    filePath = [documentsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"%@", fileName]];
    [fileManager removeItemAtPath:filePath error:NULL];
    UIAlertView *removeSuccessFulAlert=[[UIAlertView alloc]initWithTitle:@"Congratulation:" message:@"Successfully removed" delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil];
    [removeSuccessFulAlert show];
}

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


4
এটি সম্ভবত একটি ত্রুটি ছুঁড়েছে যা আপনি উপেক্ষা করেছেন, এনএসইরর উদাহরণটি যুক্ত করুন এবং এটি সরানোর পরে এটি পরীক্ষা করুন
দিমিত্রি শেভচেনকো

1
ব্যবহার - (BOOL) fileExistsAtPath: (NSString *) পাথ; চিত্রটি উপস্থিত রয়েছে কিনা তা
খতিয়ে

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

উত্তর:


238

আমি আপনার কোড পরীক্ষা করেছি। এটা আমার জন্য কাজ করছে। নীচের সংশোধিত কোড ব্যবহার করে আপনি যে কোনও ত্রুটি পেয়ে যাচ্ছেন তা পরীক্ষা করুন

- (void)removeImage:(NSString *)filename
{
  NSFileManager *fileManager = [NSFileManager defaultManager];
  NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

  NSString *filePath = [documentsPath stringByAppendingPathComponent:filename];
  NSError *error;
  BOOL success = [fileManager removeItemAtPath:filePath error:&error];
  if (success) {
      UIAlertView *removedSuccessFullyAlert = [[UIAlertView alloc] initWithTitle:@"Congratulations:" message:@"Successfully removed" delegate:self cancelButtonTitle:@"Close" otherButtonTitles:nil];
      [removedSuccessFullyAlert show];
  }
  else
  {
      NSLog(@"Could not delete file -:%@ ",[error localizedDescription]);
  }
}

আমি নথি ডিরেক্টরিতে ফাইল তৈরি করতে পারি তবে এটি সরিয়ে দেওয়ার চেষ্টা করার সময় সর্বদা ত্রুটি হয় get তোমার কোন ধারনা আছে?
ভাদিম

আমি এটি সমাধান। সমস্যাটি ছিল: আমি কোনও বৈশিষ্ট্য ছাড়াই নতুন ফাইল তৈরি করেছি এবং আমি বুঝতে পারছি এটি একটি ডিফল্ট বৈশিষ্ট্যটি এনএসফিলিএমটিউটেবল ইয়েস দিয়েছে। বা এমন কিছু। দুঃখিত এখন উত্স দেখাতে পারে না। তবে সমস্যাটি ছিল তুচ্ছ।
ভাদিম

ফাইল চেক করা কি বিদ্যমান বা না প্রয়োজনীয়?
সংগ্রাম শিবঙ্কর

এটি ডিরেক্টরি থেকে ফাইল মুছে ফেলে তবে এটি সিমুলেটারের ছবিতে চিত্র দেখায়
সাগর কোয়ানি

55

সুইফট 3.0:

func removeImage(itemName:String, fileExtension: String) {
  let fileManager = FileManager.default
  let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
  let nsUserDomainMask = FileManager.SearchPathDomainMask.userDomainMask
  let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
  guard let dirPath = paths.first else {
      return
  }  
  let filePath = "\(dirPath)/\(itemName).\(fileExtension)"
  do {
    try fileManager.removeItem(atPath: filePath)
  } catch let error as NSError {
    print(error.debugDescription)
  }}

@ অনিল ভার্গিজকে ধন্যবাদ, আমি খুব দ্রুত 2.0 তে সুইডে লিখেছিলাম:

static func removeImage(itemName:String, fileExtension: String) {
  let fileManager = NSFileManager.defaultManager()
  let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory
  let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask
  let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
  guard let dirPath = paths.first else {
    return
  }
  let filePath = "\(dirPath)/\(itemName).\(fileExtension)"
  do {
    try fileManager.removeItemAtPath(filePath)
  } catch let error as NSError {
    print(error.debugDescription)
  }
}

কেন ফাংশন স্থির?
CalZone

এটা আপনার উপর নির্ভর করছে. এটি প্রয়োজনীয় নয়
রোমান বার্জিজাক

ফাংশনটি কল করার পূর্বে / পরে ফাইলটি সরিয়ে ফেলা হয়েছে কিনা তা নিশ্চিত হওয়ার আগেও কি পরীক্ষা করার কোনও উপায় আছে?
লুক্কায়িত

1
হ্যাঁ নিশ্চিত করুন: ফাইলম্যানেজার = ফাইলমেনেজ.আর। ডিফল্ট যদি fileManager.fileExists (atPath: filePath!) {মুদ্রণ ("ফাইল উপলব্ধ") {অন্য {মুদ্রণ ("
ফাইলটি

11

সুইফট ২.০:

func removeOldFileIfExist() {
    let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
    if paths.count > 0 {
        let dirPath = paths[0]
        let fileName = "someFileName"
        let filePath = NSString(format:"%@/%@.png", dirPath, fileName) as String
        if NSFileManager.defaultManager().fileExistsAtPath(filePath) {
            do {
                try NSFileManager.defaultManager().removeItemAtPath(filePath)
                print("old image has been removed")
            } catch {
                print("an error during a removing")
            }
        }
    }
}

8

সুইফটে 3 এবং 4 উভয়ই

 func removeImageLocalPath(localPathName:String) {
            let filemanager = FileManager.default
            let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory,.userDomainMask,true)[0] as NSString
            let destinationPath = documentsPath.appendingPathComponent(localPathName)
 do {
        try filemanager.removeItem(atPath: destinationPath)
        print("Local path removed successfully")
    } catch let error as NSError {
        print("------Error",error.debugDescription)
    }
    }

অথবা এই পদ্ধতিটি সমস্ত স্থানীয় ফাইল মুছতে পারে

func deletingLocalCacheAttachments(){
        let fileManager = FileManager.default
        let documentsURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
        do {
            let fileURLs = try fileManager.contentsOfDirectory(at: documentsURL, includingPropertiesForKeys: nil)
            if fileURLs.count > 0{
                for fileURL in fileURLs {
                    try fileManager.removeItem(at: fileURL)
                }
            }
        } catch {
            print("Error while enumerating files \(documentsURL.path): \(error.localizedDescription)")
        }
    }

2
সরাসরি চেষ্টা করার পরিবর্তে শেষ লাইনে নিম্নলিখিতগুলি যুক্ত করুন। do {filemanager.removeItem (atPath: গন্তব্যপথ) মুদ্রণ ("মুছে ফেলা")} ধরা {মুদ্রণ ("মুছে ফেলা হয়নি")}
অভিরাজসিংহ ঠাকুর

5

ত্রুটিটি NULL এ সেট করার পরিবর্তে এটিতে সেট করুন

NSError *error;
[fileManager removeItemAtPath:filePath error:&error];
if (error){
NSLog(@"%@", error);
}

এটি আপনাকে জানাবে যে এটি আসলে ফাইলটি মোছা হচ্ছে কিনা


3

আমি ডকুমেন্ট ডিরেক্টরি থেকে আমার স্ক্লাইট ডিবি মুছতে চাই below

NSString *strFileName = @"sqlite";
NSFileManager *fileManager = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];

NSArray *contents = [fileManager contentsOfDirectoryAtPath:documentsDirectory error:NULL];
NSEnumerator *enumerator = [contents objectEnumerator];
NSString *filename;
while ((filename = [enumerator nextObject])) {
    NSLog(@"The file name is - %@",[filename pathExtension]);
    if ([[filename pathExtension] isEqualToString:strFileName]) {
       [fileManager removeItemAtPath:[documentsDirectory stringByAppendingPathComponent:filename] error:NULL];
        NSLog(@"The sqlite is deleted successfully");
    }
}


1

ফ্রিজোর সংস্করণটি সুইফট 3.0 এ রূপান্তরিত হয়েছে

 func removeOldFileIfExist() {
    let paths = NSSearchPathForDirectoriesInDomains(FileManager.SearchPathDirectory.documentDirectory, FileManager.SearchPathDomainMask.userDomainMask, true)
    if paths.count > 0 {
        let dirPath = paths[0]
        let fileName = "filename.jpg"
        let filePath = NSString(format:"%@/%@", dirPath, fileName) as String
        if FileManager.default.fileExists(atPath: filePath) {
            do {
                try FileManager.default.removeItem(atPath: filePath)
                print("User photo has been removed")
            } catch {
                print("an error during a removing")
            }
        }
    }
}

0

আপনি NSFileManager.defaultManager () দিয়ে আপনার ফাইল অপসারণকে দ্বিগুণ সুরক্ষা দিতে পারবেন isDeletableFileAtPath (PathName) এখন হিসাবে আপনি পুরানো ত্রুটি পদ্ধতিগুলি আর কাজ না করে।} ক্যাচ {do ব্যবহার করা উচিত। #DeletableFileAtPath () "থ্রোস" নয় (অর্থাত্ "পাবলিক ফান রিমুভ আইটেম্যাটপথ (পথ: স্ট্রিং) নিক্ষেপ") তাই এটি করার দরকার নেই ... ধর

let killFile = NSFileManager.defaultManager()

            if (killFile.isDeletableFileAtPath(PathName)){


                do {
                  try killFile.removeItemAtPath(arrayDictionaryFilePath)
                }
                catch let error as NSError {
                    error.description
                }
            }

0

যদি আপনি আধুনিক এপি পদ্ধতিতে আকর্ষণীয় হন, এনএসএস সার্চপাথ এবং ফাইলগুলি মুছে ফেলার আগে ডকুমেন্ট ডিরেক্টরিতে ফিল্টার করা, আপনি এগুলি করতে পারেন:

let fileManager = FileManager.default
let keys: [URLResourceKey] = [.nameKey, .isDirectoryKey]
let options: FileManager.DirectoryEnumerationOptions = [.skipsHiddenFiles, .skipsPackageDescendants]
guard let documentsUrl = fileManager.urls(for: .documentDirectory, in: .userDomainMask).last,
      let fileEnumerator = fileManager.enumerator(at: documentsUrl,
                                                  includingPropertiesForKeys: keys,
                                                  options: options) else { return }

let urls: [URL] = fileEnumerator.flatMap { $0 as? URL }
                                .filter { $0.pathExtension == "exe" }
for url in urls {
   do {
      try fileManager.removeItem(at: url)
   } catch {
      assertionFailure("\(error)")
   }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.