いくつかの単体テスト用にデータのディレクトリをいくつか作成し、これらのディレクトリをユーザーのデフォルトの一時ディレクトリに配置したいと思います。
/ tmpの下にサブディレクトリを作成することもできますが、誰かが自分のマシンをどのようにセットアップしたかについては推測したくありません。
テストデータをその場で書き込むことを計画しているので、これを一時ディレクトリに配置したいと思います。
いくつかの単体テスト用にデータのディレクトリをいくつか作成し、これらのディレクトリをユーザーのデフォルトの一時ディレクトリに配置したいと思います。
/ tmpの下にサブディレクトリを作成することもできますが、誰かが自分のマシンをどのようにセットアップしたかについては推測したくありません。
テストデータをその場で書き込むことを計画しているので、これを一時ディレクトリに配置したいと思います。
tmpnam()またはを使用しないでくださいtempnam()。それらは安全ではありません (詳細については、man ページを参照してください)。仮定しないでください/tmp。NSTemporaryDirectory()と併用してください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本番用コードを削除します。
この質問と NSTemporaryDirectory() のドキュメントを振り返ると、10.6 以降を使用している場合は、NSFileManager のURLForDirectory:inDomain:適切なForURL:create:error:メソッドを使用して、ディレクトリを作成するより柔軟な方法を使用することをお勧めします。 .
また、文字列パスの代わりに URL を返します。これは、使用することをお勧めするもう 1 つの方法です。
tempnam()、tmpnam()、またはtmpfile()関数を使用します。