23

いくつかの単体テスト用にデータのディレクトリをいくつか作成し、これらのディレクトリをユーザーのデフォルトの一時ディレクトリに配置したいと思います。

/ tmpの下にサブディレクトリを作成することもできますが、誰かが自分のマシンをどのようにセットアップしたかについては推測したくありません。

テストデータをその場で書き込むことを計画しているので、これを一時ディレクトリに配置したいと思います。

4

4 に答える 4

39

tmpnam()またはを使用しないでくださいtempnam()。それらは安全ではありません (詳細については、man ページを参照してください)。仮定しないでください/tmpNSTemporaryDirectory()と併用してくださいmkdtemp()NSTemporaryDirectory()を使用すると、より適切なディレクトリが得られますが、返される可能性がありnilます。私はこれに似たコードを使用しました:

NSString * tempDir = NSTemporaryDirectory();
if (tempDir == nil)
    tempDir = @"/tmp";

NSString * template = [tempDir stringByAppendingPathComponent: @"temp.XXXXXX"];
NSLog(@"Template: %@", template);
const char * fsTemplate = [template fileSystemRepresentation];
NSMutableData * bufferData = [NSMutableData dataWithBytes: fsTemplate
                                                   length: strlen(fsTemplate)+1];
char * buffer = [bufferData mutableBytes];
NSLog(@"FS Template: %s", buffer);
char * result = mkdtemp(buffer);
NSString * temporaryDirectory = [[NSFileManager defaultManager]
        stringWithFileSystemRepresentation: buffer
                                    length: strlen(buffer)];

内にファイルを作成できるようになりましtemporaryDirectoryた。NSLogs本番用コードを削除します。

于 2008-12-17T14:07:03.877 に答える
8

この質問と NSTemporaryDirectory() のドキュメントを振り返ると、10.6 以降を使用している場合は、NSFileManager のURLForDirectory:inDomain:適切なForURL:create:error:メソッドを使用して、ディレクトリを作成するより柔軟な方法を使用することをお勧めします。 .

また、文字列パスの代わりに URL を返します。これは、使用することをお勧めするもう 1 つの方法です。

于 2012-03-21T22:17:34.540 に答える
5

tempnam()、tmpnam()、またはtmpfile()関数を使用します。

于 2008-12-17T12:47:46.080 に答える