Как мне прочитать файл из файловой системы в приложении командной строки Swift? - PullRequest
0 голосов
/ 18 января 2019

Я только начинаю изучать Swift, и чтобы научить себя, я делаю простое приложение для командной строки. В конечном итоге он подключится к онлайн-источнику данных, но сначала я хочу загрузить данные из файла. Я видел различные руководства по чтению содержимого файла в Swift, но ни одно из них, похоже, не работает для меня. Вот мое приложение до сих пор:

import Foundation

// Set the file path
let path = "/Users⁩/username/workspace⁩/⁨Swift⁩/sis⁩/sis/data.json⁩"

do {
    // Get the contents
    let contents = try String(contentsOfFile: path, encoding: .utf8)
    print(contents)
}
catch let error as NSError {
    print("Ooops! Something went wrong: \(error)")
}

Запуск его выводов:

Ooops! Something went wrong: Error Domain=NSCocoaErrorDomain Code=260 "The file “data.json⁩” couldn’t be opened because there is no such file." UserInfo={NSFilePath=/Users⁩/username/workspace⁩/⁨Swift⁩/sis⁩/sis/data.json⁩, NSUnderlyingError=0x100e19a50 {Error Domain=NSPOSIXErrorDomain Code=2 "No such file or directory"}}

Однако на терминале:

$ ls -l /Users/username/workspace/Swift/sis/sis/data.json
-rwxrwxrwx@ 1 username  staff  165563 16 Jan 17:14 /Users/username/workspace/Swift/sis/sis/data.json

(да, я немного ослабил права доступа на всякий случай, если это была проблема)

Единственная слегка аномальная вещь, которую я заметил (кроме неточного утверждения о том, что файл не существует), заключалась в том, что когда я копирую и пропускаю путь из вывода XCode в iTerm2, он помещает пробелы между каждым компонентом пути:

path with spaces

(вставленный в виде изображения, копирующий его и вставляющий обратно в эту форму, кажется, скрывает пробелы - в любом случае это, вероятно, не имеет значения)

Любая помощь в выяснении этого будет очень признательна!

1 Ответ

0 голосов
/ 18 января 2019

Я скопировал ваш код, скачал файл образца json на свой рабочий стол и переименовал его в example_ 1.json (я включил пробел в имя файла).

import Foundation

// Set the file path
let path = "/Users⁩/username/Desktop/example_ 1.json⁩"

do {
    // Get the contents
    let contents = try String(contentsOfFile: path, encoding: .utf8)
    print(contents)
}
catch let error as NSError {
    print("Ooops! Something went wrong: \(error)")
}

Он успешно распечатал файл. Это также работало, когда я определял содержимое как строку NSString.

let contents = try NSString(contentsOfFile: path, 
                            encoding: String.Encoding.ascii.rawValue)

Я использую Swift 4.2.1

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...