CommandLineToolkit

Форк
0
/
TemporaryFile.swift 
45 строк · 1.3 Кб
1
#if canImport(Darwin)
2
import Darwin
3
#endif
4
#if canImport(Glibc)
5
import Glibc
6
#endif
7
import Foundation
8
import PathLib
9

10
public final class TemporaryFile {
11
    public let fileHandleForWriting: FileHandle
12
    public let absolutePath: AbsolutePath
13
    private let deleteOnDealloc: Bool
14
    
15
    public init(
16
        containerPath: AbsolutePath? = nil,
17
        prefix: String = "TemporaryFile",
18
        suffix: String = "",
19
        closeOnDealloc: Bool = true,
20
        deleteOnDealloc: Bool = true
21
    ) throws {
22
        let containerPath = containerPath ?? AbsolutePath(NSTemporaryDirectory())
23
        let pathTemplate = containerPath.appending("\(prefix).XXXXXX\(suffix)")
24
        
25
        var templateBytes = [UInt8](pathTemplate.pathString.utf8).map { Int8($0) } + [Int8(0)]
26
        let fileDescriptor = mkstemps(&templateBytes, Int32(suffix.count))
27
        
28
        if fileDescriptor == -1 {
29
            throw ErrnoError.failedToCreateTemporaryFile(pathTemplate, code: errno)
30
        }
31
        
32
        self.fileHandleForWriting = FileHandle(
33
            fileDescriptor: fileDescriptor,
34
            closeOnDealloc: closeOnDealloc
35
        )
36
        self.absolutePath = AbsolutePath(String(cString: templateBytes))
37
        self.deleteOnDealloc = deleteOnDealloc
38
    }
39
    
40
    deinit {
41
        if deleteOnDealloc {
42
            unlink(absolutePath.pathString)
43
        }
44
    }
45
}
46

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.