summaryrefslogtreecommitdiff
path: root/Utils/FileWriter.swift
diff options
context:
space:
mode:
Diffstat (limited to 'Utils/FileWriter.swift')
-rw-r--r--Utils/FileWriter.swift91
1 files changed, 91 insertions, 0 deletions
diff --git a/Utils/FileWriter.swift b/Utils/FileWriter.swift
new file mode 100644
index 0000000..6330342
--- /dev/null
+++ b/Utils/FileWriter.swift
@@ -0,0 +1,91 @@
+//
+// FileWriter.swift
+// PrySDR
+//
+// Created by Jacky Jack on 21/01/2025.
+//
+
+import Foundation
+
+enum FileWriterError: Error {
+ case noFile
+ case writeError
+ case createError
+}
+
+class FileWriter {
+ var filepath: String?
+ let filemgr = FileManager.default
+ var fileHandle: FileHandle?
+
+ init() {
+
+ }
+
+ func openForRead(filename: String) throws {
+ let dir = getCurrentExecutableDir()
+ self.filepath = dir+"/"+filename
+ print(dir+"/"+filename)
+ if !filemgr.fileExists(atPath: filename) {
+ print("Cant find file \(filename)")
+ throw FileReaderError.noFile
+ }
+
+ fileHandle = FileHandle(forReadingAtPath: dir+"/"+filename)
+ if (fileHandle == nil) {
+ print("FileHandler failed")
+ }
+ }
+
+ func createForWrite(filename: String) throws {
+ let dir = getCurrentExecutableDir()
+
+ self.filepath = dir+"/"+filename
+
+ if !filemgr.fileExists(atPath: filename) {
+ filemgr.createFile(atPath: dir+"/"+filename, contents: nil)
+ }
+ fileHandle = FileHandle(forUpdatingAtPath: dir+"/"+filename)
+ if (fileHandle == nil) {
+ print("FileHandler failed")
+ throw FileWriterError.createError
+ }
+ }
+
+ func deleteForWrite(filename: String) throws {
+ let dir = getCurrentExecutableDir()
+
+ self.filepath = dir+"/"+filename
+
+ if filemgr.fileExists(atPath: filename) {
+ do {
+ try filemgr.removeItem(atPath: filename)
+ filemgr.createFile(atPath: dir+"/"+filename, contents: nil)
+ } catch {
+ print("couldnt delete file to write: \(error)")
+ }
+ }
+ fileHandle = FileHandle(forWritingAtPath: dir+"/"+filename)
+ if (fileHandle == nil) {
+ print("FileHandler failed")
+ throw FileWriterError.createError
+ }
+ }
+
+ func writeAll(_ arr: [Float32]) throws {
+ //convert float to data
+ let databuf = arr.withUnsafeBytes { Data($0) }
+ do {
+ print("try to write \(databuf.count) bytes")
+ try fileHandle?.write(contentsOf: databuf)
+ } catch {
+ print("Cant write to file \(self.filepath) : \(error)")
+ throw FileWriterError.writeError
+ }
+ }
+
+ func close() {
+ fileHandle?.closeFile()
+ }
+
+}