質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

3回答

10258閲覧

Swiftで外部ファイルに対して追記する方法を教えて下さい

kiteretsu

総合スコア57

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

4クリップ

投稿2016/05/12 01:36

編集2016/05/12 01:59

Swiftを使用してiOSアプリを制作しているのですが、
外部ファイルへ追記する方法がわからず困っています。

lang

1let text: String = "test" 2 3do { 4try text.writeToFile(filepath, atomically: true, encoding: NSUTF8StringEncoding) 5} catch { }

上記のようなコードを見つけたのですが、これだと上書き保存されてしまうようです。

追記する場合は既存のファイルの中身を1度読み込み、
追記したいものとあらかじめ結合させてから
上書きするしかないのでしょうか ?

既存のファイルに対して追記するメソッドなどをご存知でしたらご教授下さい。
宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

NSFileHandleのseekToEndOfFileを使ってファイルポインタを最終位置まで移動して書き込む方法もあるようです。
(参考)
http://stackoverflow.com/questions/27327067/append-text-or-data-to-text-file-in-swift

投稿2016/05/12 13:24

TakeOne

総合スコア6299

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kiteretsu

2016/05/12 15:15

そんな機能があったんですね。 教えて頂きありがとうございます。
guest

0

ベストアンサー

NSOutputStreamを使ってください。

Swift

1let output = NSOutputStream(toFileAtPath: filepath, append: true) 2output?.open() 3let text = "test" 4let cstring = text.cStringUsingEncoding(NSUTF8StringEncoding) 5let bytes = UnsafePointer<UInt8>(cstring!) 6let size = text.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) 7output?.write(bytes, maxLength: size) 8output?.close() 9

投稿2016/05/12 13:06

Stripe

総合スコア2183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kiteretsu

2016/05/12 14:58

おお、Streamですか。 Streamは使ったことがないので、調べてみます。 教えていただき、ありがとうございます。
guest

0

追記する場合は既存のファイルの中身を1度読み込み、

追記したいものとあらかじめ結合させてから
上書きするしかないのでしょうか ?

メソッド等はないので、書いている通りの操作が必要だと思います。

ファイル操作に限らず、UserDefaultsにせよ,Databaseにせよ
格納している値にプラスする場合は元の値を知るために先に取り出す必要があるので、同じ事をしなければならないと思います。

投稿2016/05/12 11:17

_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kiteretsu

2016/05/12 13:00

ご回答ありがとうございます。 やっぱり無いんですね。素直に結合することにします。 ありがとうございました。
_Kentarou

2016/05/12 18:35 編集

すみません、勉強不足でした! 
kiteretsu

2016/05/13 15:32

大丈夫です!ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問