0

この要件は、すべてのサブファイルとフォルダの変更日とともにディレクトリの内容を読み取るために非常に固有です。WindowsにはいくつかのAPIがありますが、MacOS開発で同様の機能は見つかりませんでした。これを検索したところ、NSFileManagerを使用できることがわかりました。Documentsディレクトリの下にパスの内容を取得できる場所が1つ見つかりました。

これが私が持っているコードコードです。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsPath = [paths objectAtIndex:0];

NSFileManager *manager = [[NSFileManager alloc] init];
NSDirectoryEnumerator *fileEnumerator = [manager enumeratorAtPath:documentsPath];

for (NSString *filename in fileEnumerator) {
    // Do something with file
    NSLog(@"file name : %@",filename );
}

しかし、私の要件は、すべてのサブファイルとその中のフォルダーの日付が変更されたマシン上の任意のパスの下でコンテンツを見つけることです。それについて私を案内してください。

ありがとう、タウシフ。

4

2 に答える 2

1

これに使えます[NSFilemanager.defaultManager subpathsAtPath:<yourpath> error:nil]。おそらく、特別な NSFileManager インスタンスは必要ないので、defaultManager.

NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:(-60*60*24)];

NSFileManager *fm = NSFileManager.defaultManager;
NSArray *subPaths = [fm subpathsAtPath:documentsPath];

for (NSString *path in subPaths) {
    NSDictionary *attributes = [fm fileAttributesAtPath:path traverseLink:YES];
    NSDate *lastModificationDate = [attributes objectForKey:NSFileModificationDate];

    if ([yesterday earlierDate:lastModificationDate] == yesterday) {
        NSLog(@"%@ was modified within the last 24 hours", path);
    }
}
于 2012-12-09T09:14:35.133 に答える
1

Apple には、これを行う方法を示すコード サンプルがあります。

NSDirectoryEnumerator *directoryEnumerator = [[NSFileManager defaultManager] enumeratorAtPath:directoryPath];

NSDate *yesterday = [NSDate dateWithTimeIntervalSinceNow:(-60*60*24)];

for (NSString *path in directoryEnumerator) {

    if ([[path pathExtension] isEqualToString:@"rtfd"]) {
        // Don't enumerate this directory.
        [directoryEnumerator skipDescendents];
    } else {
        NSDictionary *attributes = [directoryEnumerator fileAttributes];
        NSDate *lastModificationDate = [attributes objectForKey:NSFileModificationDate];

        if ([yesterday earlierDate:lastModificationDate] == yesterday) {
            NSLog(@"%@ was modified within the last 24 hours", path);
        }
    }
}

基本的に、このコードは を列挙しdirectoryPath、ファイルまたはディレクトリが過去 24 時間以内に変更されたかどうかをチェックします。

于 2012-12-08T10:07:44.647 に答える