前提・実現したいこと
UnityでAndroidのアンケートアプリを作っています
時間と正解数をアンドロイドのローカル(外部でも内部でも可)に保存したいです。
その結果の統計などを取りたいので、パソコンでセーブデータを見れるようにしたいので必ずしもCSVファイルである必要はありません。XMLファイルでもいいですが、バイナリーファイルでしかできないなら、CSVファイルへの変換方法まで教えていただけると嬉しいです
PlayerPrefでの保存でもいいですが、CSVファイルへの変換方法がわかりません
バイナリファイルがいくつかできるのは、知っていますが、ファイル名も数字の羅列でよくわからないのでどう扱っていいかに困っています
とにかく、セーブデータを外部にエクスポートでき、それをパソコンで見れれば十分です
発生している問題・エラーメッセージ
NotSupportedExeptionと出てきます
パソコンでは、何ら問題がなくできたんですが、アンドロイドで動かすとうまくいきません
該当のソースコード
using UnityEngine; using UnityEngine.UI; using System.Text; using System.IO; public class exportCsvScript : MonoBehaviour { //Reference: https://dobon.net/vb/dotnet/file/edittextfile.html //public GameObject CSVText; // Use this for initialization void Start() { Debug.Log(UnityEngine.Application.persistentDataPath); CheckExixtCSV(); ReadCSV(); } // Update is called once per frame void Update() { } void OverWriteCSV() { // ファイル書き出し // 現在のフォルダにsaveData.csvを出力する(決まった場所に出力したい場合は絶対パスを指定してください) // 引数説明:第1引数→ファイル出力先, 第2引数→ファイルに追記(true)or上書き(false), 第3引数→エンコード //falseにすると、ファイルを新規作成する StreamWriter sw = new StreamWriter(UnityEngine.Application.persistentDataPath + "/saveData.txt", false, Encoding.GetEncoding("Shift_JIS")); // ヘッダー出力 string[] s1 = { "00", "01", "02", "03" }; string s2 = string.Join(",", s1); sw.WriteLine(s2); // データ出力 //ここでまず入れたいデータを配列として扱う string[] str = {DataScripts.CorrectNumber.ToString(), DataScripts.TotalTime.ToString(), DataScripts.ChooseCircleNumber.ToString(), DataScripts.ChooseCrosstNumber.ToString() }; //ここで","を付けた形にする(str2に配列strに","を付けたものを代入する) string str2 = string.Join(",", str); //ここで初めて書き込む sw.WriteLine(str2); // StreamWriterを閉じる sw.Flush(); sw.Close(); } void AppendCSV() { // ファイル書き出し // 現在のフォルダにsaveData.csvを出力する(決まった場所に出力したい場合は絶対パスを指定してください) // 引数説明:第1引数→ファイル出力先, 第2引数→ファイルに追記(true)or上書き(false), 第3引数→エンコード //falseにすると、ファイルを新規作成する StreamWriter sw = new StreamWriter(UnityEngine.Application.persistentDataPath + "/saveData.txt", true, Encoding.GetEncoding("Shift_JIS")); // データ出力 //ここでまず入れたいデータを配列として扱う string[] str = { DataScripts.CorrectNumber.ToString(), DataScripts.TotalTime.ToString(), DataScripts.ChooseCircleNumber.ToString(), DataScripts.ChooseCrosstNumber.ToString() }; //ここで","を付けた形にする(str2に配列strに","を付けたものを代入する) string str2 = string.Join(",", str); //ここで初めて書き込む sw.WriteLine(str2); // StreamWriterを閉じる sw.Flush(); sw.Close(); } void ReadCSV() { // ファイル読み込み // 引数説明:第1引数→ファイル読込先, 第2引数→エンコード StreamReader sr = new StreamReader(UnityEngine.Application.persistentDataPath + "/saveData.txt", Encoding.GetEncoding("Shift_JIS")); string line; // 行がnullじゃない間(つまり次の行がある場合は)、処理をする while ((line = sr.ReadLine()) != null) { // コンソールに出力 Debug.Log(line); //Text YourCSVText= CSVText.GetComponent<Text>(); // テキストの表示を入れ替える //YourCSVText.text = line.ToString(); } // StreamReaderを閉じる sr.Close(); } void CheckExixtCSV() { if (System.IO.File.Exists(UnityEngine.Application.persistentDataPath + "/saveData.txt")){ Debug.Log("CSVファイルが存在するので追記します"); AppendCSV(); } else { Debug.Log("CSVファイルが存在しないので作成します"); OverWriteCSV(); } } }
試したこと
現在はStreamWriterを使ってApplication.persistentDataPathに保存しようとしています
パソコン上では、しっかりと保存されているのを確認できましたが、Androidにビルドしてみるとファイルが作成されるどころか、CSVファイルの読み込みすらできません(あらかじめCSVファイルをそのPathに置いておいて読み込めるか確認しました)
パスが間違っているのかと思い、CSVファイルがあるかどうかだけ調べる関数を作ったところ、パスはあっており、CSVファイルがあることは確認できました
ただ、読み込み書き込みができないようでログを表示してみると(TEXTにログを表示するようにしてあるので、アンドロイド上でも見えるようになっています)NotSupportedExeptionと出てきます
そもそもAndroidにはCSVファイルを作る能力がないのでしょうか?(TXTでも試してみましたができませんでした)
Unityで開発したいので、解決できると嬉しいです
補足情報(FW/ツールのバージョンなど)
UntiyのPlayerSettingでInternalをExternal(SD card)にするといいと聞いたのでそれも試してみましたが効果はありませんでした。
他の質問ではApplication.DataPathじゃなくてApplication.persistentDataPathにすればできるというものばかりで、参考になるものがありません
SQLiteで保存する方法があるそうですが、ローカル保存ができてパソコンで開くことができるならそれでもいいです
(外部にセーブデータをエクスポートしたい)
よろしくお願いします
回答1件
あなたの回答
tips
プレビュー