43

何年も前に C# を使用していたとき、一時ファイルを簡単に作成し、次の関数を使用してその名前を取得できました。

Path.GetTempFileName();

この関数は、一時ディレクトリに一意の名前のファイルを作成し、そのファイルへのフル パスを返します。

Cocoa API で、私が見つけることができる最も近いものは次のとおりです。

NSTemporaryDirectory

明らかな何かが欠けていますか、それともこれを行うための組み込みの方法はありませんか?

4

11 に答える 11

36

安全な方法は、mkstemp(3)を使用することです。

于 2008-10-19T01:37:40.447 に答える
21

[注: これは Mac OS SDK ではなく、iPhone SDK に適用されます]

私が知る限り、これらの関数は SDK には存在しません (unistd.h標準の Mac OS X 10.5 ファイルと比較すると、ファイルは大幅に削減されています)。私は次のようなものを使用します:

[NSTemporaryDirectory() stringByAppendingPathComponent: [NSString stringWithFormat: @"%.0f.%@", [NSDate timeIntervalSinceReferenceDate] * 1000.0, @"txt"]];

美しくはないが機能的

于 2008-10-19T02:58:41.673 に答える
17

Apple は、一時ディレクトリにアクセスし、一時ファイルに一意の名前を作成するための優れた方法を提供しています。

- (NSString *)pathForTemporaryFileWithPrefix:(NSString *)prefix
{
    NSString *  result;
    CFUUIDRef   uuid;
    CFStringRef uuidStr;

    uuid = CFUUIDCreate(NULL);
    assert(uuid != NULL);

    uuidStr = CFUUIDCreateString(NULL, uuid);
    assert(uuidStr != NULL);

    result = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@-%@", prefix, uuidStr]];
    assert(result != nil);

    CFRelease(uuidStr);
    CFRelease(uuid);

    return result;
}

リンク:::: http://developer.apple.com/library/ios/#samplecode/SimpleURLConnections/Introduction/Intro.html#//apple_ref/doc/uid/DTS40009245 ファイルを参照 :::AppDelegate.m

于 2011-11-29T06:58:58.160 に答える
11

とグローバルに一意の IDNSFileManagerの組み合わせを使用するカテゴリを使用して、純粋な Cocoa ソリューションを作成しました。NSTemporary()

ここにヘッダーファイルがあります:

@interface NSFileManager (TemporaryDirectory)

-(NSString *) createTemporaryDirectory;

@end

そして実装ファイル:

@implementation NSFileManager (TemporaryDirectory)

-(NSString *) createTemporaryDirectory {
 // Create a unique directory in the system temporary directory
 NSString *guid = [[NSProcessInfo processInfo] globallyUniqueString];
 NSString *path = [NSTemporaryDirectory() stringByAppendingPathComponent:guid];
 if (![self createDirectoryAtPath:path withIntermediateDirectories:NO attributes:nil error:nil]) {
  return nil;
 }
 return path;
}

@end

これにより一時ディレクトリが作成されますが、ファイルを作成するcreateFileAtPath:contents:attributes:代わりに使用するように簡単に変更できます。createDirectoryAtPath:

于 2010-10-22T23:18:48.143 に答える
6

スウィフト 5 およびスウィフト 4.2

import Foundation

func pathForTemporaryFile(with prefix: String) -> URL {
    let uuid = UUID().uuidString
    let pathComponent = "\(prefix)-\(uuid)"
    var tempPath = URL(fileURLWithPath: NSTemporaryDirectory())
    tempPath.appendPathComponent(pathComponent)
    return tempPath
}

let url = pathForTemporaryFile(with: "blah")
print(url)
// file:///var/folders/42/fg3l5j123z6668cgt81dhks80000gn/T/johndoe.KillerApp/blah-E1DCE512-AC4B-4EAB-8838-547C0502E264

あるいは、Ssswift のワンライナー:

let prefix = "blah"
let url2 = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("\(prefix)-\(UUID())")
print(url2)
于 2015-07-03T11:12:21.900 に答える
2

mktempを使用して一時ファイル名を取得できます。

于 2008-10-19T01:24:17.480 に答える
0

NSTasktoを使用しuuidgenて一意のファイル名を取得し、それを from の文字列に追加できますNSTemporaryDirectory()。これは Cocoa Touch では機能しません。ただし、少し長いです。

于 2008-10-19T13:13:25.413 に答える