1

の現在のディレクトリパスをに変更したとき、main.mなぜnewDirまだファイルがないと表示されるのnewDirですか?また、私はこのプログラムをエラーなしで複数回実行しました。それは私が複数を作成することになったという意味newDirですか?

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

    @autoreleasepool {
        NSString *newDir = @"newDir";
        NSFileManager *manager = [NSFileManager defaultManager];

        if ([manager createDirectoryAtPath:newDir withIntermediateDirectories:YES attributes:nil error:NULL] == NO) {
            NSLog(@"couldnt create new directory");
            return 1;
        }

        if ([manager changeCurrentDirectoryPath: newDir] == NO) {
            NSLog(@"couldnt change directory path");
            return 2;
        }

        NSLog(@"%@", [manager currentDirectoryPath]);
        NSLog(@"%@", [manager contentsOfDirectoryAtPath:newDir error:NULL]);
    }
    return 0;
}

出力:

2012-08-07 10:27:20.428 Test[853:707] /Users/ss/Library/Developer/Xcode/DerivedData/Test-bfrqtnrhaafmdzghoyirjnfqjbfc/Build/Products/Debug/newDir
2012-08-07 10:36:47.832 Test[885:707] (null)
4

2 に答える 2

1

呼び出しのエラーを無視してcontentsOfDirectoryAtPathいるため、呼び出しが失敗している可能性があります。つまり、nullです。

参照を確認せずに、ディレクトリを探しているようです。.../newDir/newDirディレクトリは存在しない可能性があります。

いずれにせよ、newDirは新しいので、エントリは含まれません(。と..以外)。

于 2012-08-07T14:53:48.627 に答える
1

へのパスmain.mは、プログラムを実行したときに何が起こるかを考慮していません。唯一の問題は、ディレクトリにファイルがあるかどうかであり、ログからはファイルがないように見えます。

ディレクトリにいくつかのファイルを作成するには、ターミナルウィンドウで次のコマンドを実行します。

touch /Users/ss/Library/Developer/Xcode/DerivedData/Test-bfrqtnrhaafmdzghoyirjnfqjbfc/Build/Products/Debug/newDir/quick.txt
touch /Users/ss/Library/Developer/Xcode/DerivedData/Test-bfrqtnrhaafmdzghoyirjnfqjbfc/Build/Products/Debug/newDir/brown.txt
touch /Users/ss/Library/Developer/Xcode/DerivedData/Test-bfrqtnrhaafmdzghoyirjnfqjbfc/Build/Products/Debug/newDir/fox.txt

これにより、3つの空のファイルが作成されます。txt次に、プログラムを実行して、新しく作成されたファイルが検出されるかどうかを確認します。そうすべき。

2番目の質問では、オペレーティングシステムでは、同じ名前の複数のファイルシステムオブジェクトを作成できません。そのため、答えは「いいえ」です。作成したのは1つだけnewDirです。

于 2012-08-07T14:49:20.677 に答える