ডকুমেন্টস ফোল্ডারে কোনও ফাইল রয়েছে কিনা তা কীভাবে পরীক্ষা করবেন?


216

অ্যাপ্লিকেশন ক্রয়ের সাথে আমার একটি অ্যাপ্লিকেশন রয়েছে, যে যখন ব্যবহারকারী কোনও জিনিস কিনে, তখন আমার অ্যাপের ডকুমেন্টস ফোল্ডারে একটি এইচটিএমএল ফাইল ডাউনলোড করুন download

এখন আমি অবশ্যই এই HTML ফাইলটি উপস্থিত আছে কিনা তা যাচাই করে নিতে হবে, সুতরাং যদি সত্য হয় তবে এই এইচটিএমএল ফাইলটি লোড করুন, অন্যথায় আমার ডিফল্ট এইচটিএমএল পৃষ্ঠাটি লোড করুন।

আমি কীভাবে এটি করতে পারি? সাথে NSFileManagerআমি বাইরে যেতে পারি না mainBundle..


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

উত্তর:


521

সুইফট 3:

let documentsURL = try! FileManager().url(for: .documentDirectory,
                                          in: .userDomainMask,
                                          appropriateFor: nil,
                                          create: true)

... আপনাকে দস্তাবেজ ডিরেক্টরিতে একটি ফাইল URL দেয়। Foo.html নামের কোনও ফাইল আছে কিনা তা নিম্নলিখিত চেক করে:

let fooURL = documentsURL.appendingPathComponent("foo.html")
let fileExists = FileManager().fileExists(atPath: fooURL.path)

উদ্দেশ্য গ:

NSString* documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

NSString* foofile = [documentsPath stringByAppendingPathComponent:@"foo.html"];
BOOL fileExists = [[NSFileManager defaultManager] fileExistsAtPath:foofile];

12
নোট করুন যে আপনি নিজের অ্যাপ্লিকেশনটির ব্যক্তিগত ডকুমেন্টস ডিরেক্টরি থেকে একটি ফাইল লোড করছেন, বিশ্বব্যাপী নয় যে আপনি জেলব্রেকড অবস্থায় রয়েছেন not যদি আপনি / অ্যাপ্লিকেশনগুলিতে আপনার অ্যাপ্লিকেশনটি ইনস্টল করেন তবে এটি যদি একটি প্রধান অ্যাপ্লিকেশন হয় তবে আপনার কাছে পুরো ফাইল সিস্টেমে অ্যাক্সেস থাকবে এবং আপনি ভাগ করা নথিপত্র ডিরেক্টরিটি ব্যবহার করবেন। আপনি যদি এটি আইটিউনস বা এক্সকোডের মাধ্যমে ইনস্টল করেন আপনি আপনার অ্যাপ্লিকেশনগুলির ব্যক্তিগত ডিরেক্টরি ব্যবহার করবেন। ব্যাকআপ উদ্দেশ্যে আপনার স্থানীয় ডিরেক্টরিতে ফাইলগুলি সঞ্চয় করা ভাল।
এপসিলন প্রাইম

6
অবজেক্টটিআইডেক্স: 0 এখন ফার্স্টবজেক্টের সাথে প্রতিস্থাপন করা যেতে পারে
গোবিন্দ

3
অথবা কেবল [0]সূচক অ্যাক্সেসের মাধ্যমে
অস্থায়ী_ ব্যবহারকারী_নাম

firstObject চেয়ে বেশি নিরাপদ [0] এবং objectAtIndex: 0
Itachi

1
@ ইটাচি আসলে এই ক্ষেত্রে আমি ব্যতিক্রমটি পছন্দ করি যখন অ্যারেতে কোনও অবজেক্ট থাকে না। যদি ফল firstObjectহয় nilকোন যুক্তিসম্মত পথ কিভাবে প্রোগ্রাম অবিরত পারে, যেমন অ্যাপল অবকাঠামো কিছু গম্ভীরভাবে নষ্ট হয়ে গেছে।
নিকোলাই রুহে

14

অ্যাপল ফাইলএক্সিস্টপথ: পদ্ধতিতে নির্ভর করার বিরুদ্ধে পরামর্শ দেয়। কেবলমাত্র একটি ফাইল খোলার চেষ্টা করা এবং ফাইলটি উপস্থিত না থাকলে ত্রুটিটি মোকাবেলা করা প্রায়শই ভাল।

এনএসফাইম্যানেজার ক্লাস রেফারেন্স

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

উত্স: অ্যাপল বিকাশকারী এপিআই রেফারেন্স

সুরক্ষিত কোডিং গাইড থেকে।

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


1
যদিও এটি নিজের পক্ষে দুর্দান্ত পরামর্শ দেওয়ার পক্ষে একটি ভাল উত্তর। এটি কীভাবে একটি ছোট কোড উদাহরণ দিয়ে প্রয়োগ করা যেতে পারে তা দেখতে ভাল হবে।
SnareChops

8

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

for (int i = 0; i < numberHere; ++i){
    NSFileManager* fileMgr = [NSFileManager defaultManager];
    NSString *documentsDirectory = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
    NSString* imageName = [NSString stringWithFormat:@"image-%@.png", i];
    NSString* currentFile = [documentsDirectory stringByAppendingPathComponent:imageName];
    BOOL fileExists = [fileMgr fileExistsAtPath:currentFile];
    if (fileExists == NO){
        cout << "DOESNT Exist!" << endl;
    } else {
        cout << "DOES Exist!" << endl;
    }
}

4

সুইফট ২.০

সুইফট ব্যবহার করে ফাইলটি বিদ্যমান কিনা তা এইভাবে পরীক্ষা করা যায়

func isFileExistsInDirectory() -> Bool {
    let paths = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true)
    let documentsDirectory: AnyObject = paths[0]
    let dataPath = documentsDirectory.stringByAppendingPathComponent("/YourFileName")

    return NSFileManager.defaultManager().fileExistsAtPath(dataPath)
}

3

নথি / ক্যাচমেজ পাথের পাশে ফাইল উপস্থিত আছে কিনা তা পরীক্ষা করুন:

NSString *stringPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSString *tempName = [NSString stringWithFormat:@"%@/catchimage/%@.png",stringPath,@"file name"];
NSLog(@"%@",temName);
if([[NSFileManager defaultManager] fileExistsAtPath:temName]){
    // ur code here
} else {
    // ur code here** 
}

0
NSArray *directoryPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *imagePath =  [directoryPath objectAtIndex:0];
//If you have superate folder
imagePath= [imagePath stringByAppendingPathComponent:@"ImagesFolder"];//Get docs dir path with folder name
_imageName = [_imageName stringByAppendingString:@".jpg"];//Assign image name
imagePath= [imagePath stringByAppendingPathComponent:_imageName];
NSLog(@"%@", imagePath);

//Method 1:
BOOL file = [[NSFileManager defaultManager] fileExistsAtPath: imagePath];
if (file == NO){
    NSLog("File not exist");
} else {
    NSLog("File exist");
}

//Method 2:
NSData *data = [NSData dataWithContentsOfFile:imagePath];
UIImage *image = [UIImage imageWithData:data];
if (!(image == nil)) {//Check image exist or not
    cell.photoImageView.image = image;//Display image
}

0

NSURL.h তা করার - (BOOL)checkResourceIsReachableAndReturnError:(NSError **)errorজন্য সরবরাহ করা হয়েছে

NSURL *fileURL = [NSURL fileURLWithPath:NSHomeDirectory()];
NSError * __autoreleasing error = nil;
if ([fileURL checkResourceIsReachableAndReturnError:&error]) {
    NSLog(@"%@ exists", fileURL);
} else {
    NSLog(@"%@ existence checking error: %@", fileURL, error);
}

বা সুইফ্ট ব্যবহার করে

if let url = URL(fileURLWithPath: NSHomeDirectory()) {
    do {
        let result = try url.checkResourceIsReachable()
    } catch {
        print(error)
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.