[swift] 파일 스트림으로 수정하기

파일을 스트림으로 열어서 수정하고 저장하는 것은 Swift 언어에서 자주 사용되는 작업 중 하나입니다. 파일 스트림은 파일을 일부분씩 읽어들이거나 쓸 수 있는 방법을 제공하므로 대용량 파일이나 특정 위치에 있는 파일을 효율적으로 수정할 수 있습니다.

이번에는 Swift 언어를 사용하여 파일 스트림을 열고, 파일을 수정한 후 저장하는 방법을 알아보겠습니다.

파일 스트림 열기

먼저 수정하고자 하는 파일을 스트림으로 열어야 합니다. 이를 위해서는 FileHandle 클래스를 사용합니다. 다음은 파일 스트림을 열고 파일 핸들을 반환하는 함수입니다.

func openFileWithStream(path: String) -> FileHandle? {
    let fileManager = FileManager.default
    if fileManager.fileExists(atPath: path) {
        return FileHandle(forUpdatingAtPath: path)
    } else {
        return nil
    }
}

이 함수는 주어진 경로의 파일이 존재하는 경우 파일 핸들을 반환하고, 존재하지 않는 경우 nil을 반환합니다.

파일 내용 수정하기

이제 파일 핸들을 사용하여 파일을 읽고 수정하는 작업을 수행할 수 있습니다. 다음은 파일 핸들을 이용하여 파일을 읽고 수정하는 예제 코드입니다.

func modifyFileContent(fileHandle: FileHandle, newData: Data) {
    // 현재 파일 포인터 위치 가져오기
    let offset = fileHandle.offsetInFile
    
    // 파일 포인터 위치를 원하는 위치로 이동
    fileHandle.seek(toFileOffset: offset)
    
    // 새로운 데이터로 파일 내용 수정
    fileHandle.write(newData)
}

위의 예제 코드에서는 offsetInFile 속성을 사용하여 현재 파일 포인터 위치를 가져옵니다. 그리고 seek(toFileOffset:) 메서드를 사용하여 파일 포인터 위치를 원하는 위치로 이동시킵니다. 마지막으로 write(_:) 메서드를 사용하여 새로운 데이터로 파일을 수정합니다.

파일 저장하기

파일을 수정한 후에는 변경 사항을 파일에 저장해야 합니다. 이를 위해서는 파일 핸들의 synchronizeFile() 메서드를 호출하여 변경 사항을 실제 파일에 쓰도록 합니다. 다음은 파일을 저장하는 함수입니다.

func saveFile(fileHandle: FileHandle) {
    fileHandle.synchronizeFile()
}

사용 예제

이제 위에서 작성한 함수들을 활용하여 파일을 스트림으로 열고 수정한 후 저장하는 예제 코드를 작성해보겠습니다.

if let filePath = Bundle.main.path(forResource: "example", ofType: "txt") {
    if let fileHandle = openFileWithStream(path: filePath) {
        let newData = "Hello, Swift!".data(using: .utf8)
        modifyFileContent(fileHandle: fileHandle, newData: newData)
        saveFile(fileHandle: fileHandle)
        
        fileHandle.closeFile()
    }
}

위의 코드는 “example.txt” 파일을 스트림으로 열고, 파일 내용을 “Hello, Swift!”로 수정한 후 저장하는 예제입니다. 파일 핸들을 사용한 다음에는 closeFile() 메서드를 호출하여 파일 핸들을 닫아주어야 합니다.

이렇게 파일을 스트림으로 열어서 수정하는 방법을 알아보았습니다. 파일 스크림을 사용하면 대용량 파일이나 특정 위치에 있는 파일을 효율적으로 수정할 수 있습니다. 다양한 목적에 맞게 파일 스트림을 사용하여 파일을 수정해보세요.