2009-12-02 15 views
32

Monotouch iPhoneアプリケーションでファイルを作成して書き込む方法を教えてください。Monotouchでファイルに書き込む

ファイルはアプリケーションの起動の間に持続するはずなので、Appバンドル(ドキュメントまたはリソース)のどこかに配置する必要があります。

using (StreamWriter writer = new StreamWriter (Path.Combine (Environment.SpecialFolders.Documents, "yourfilename.ext"))) { } 

をし、そのファイルを作成します。

答えて

100

を[注:私はしませんので、私の応答はかなり徹底していますアプリのバンドルやiPhoneアプリのサンドボックス化された小さな世界の構造についての理解のレベルを知っている - 私が知っていることをカバーすれば謝罪する - あまりにも多すぎるものを書くのが好きで、ちょっと追加するのが好きだよなぜ議論するときどのように ...]

あなたにはいくつかのオプションがあります(もちろん)。私はあなたが既に.Netにある程度親しんでいると仮定しています。あなたの質問は、これをiPhone Wayにする方法に関するものです。

すべてのiPhoneアプリ(そしてOS Xのアプリでも同じことが分かります)は、従来の意味で実行可能ファイルではなく、実際にはアプリのバイナリが存在するフォルダ階層(リソース、設定などと共に)。

iPhone開発者がどのようにiPhoneアプリを開発しているかによって、通常はデスクトップ開発時に使用できる共有フォルダにアクセスすることはできません。アプリケーションがアクセスできるユーザーのホームフォルダ)。

代わりに、アプリには通常、アプリ全体で共有されるフォルダの個人的なセットと同じ独自のフォルダ階層があります。

あなたのアプリのフォルダー構造が電話でどのようになっているかを確認する最も簡単な方法は、iPhoneシミュレーターがアプリのインストール、設定、または何らかの理由で使用するフォルダーを調べることです。私のマシン上で(これは設定可能である場合、私は覚えていませんが、それはおそらくあなたのシステム上で同じです)、あなたはこのパスでフォルダを取得することができます。その内部

~/Library/Application Support/iPhone Simulator

を、ユーザーがあります/アプリケーションフォルダには、シミュレータにインストールしたアプリが含まれています。これらのフォルダのいずれかにドリルダウンすると、アプリケーションが電話でアクセスできるフォルダ構造がわかります。

アプリセッション間で永続化したいファイルを保存する場合は、アプリのドキュメントフォルダがその場所になります。ファイルを作成するための唯一の選択肢ではありませんが、この仕事のために右が選択されています。ファイルが正しく保存されていることに加えて、ドキュメントフォルダに保存されると、ユーザーが同期したときにiTunesによってバックアップされます。MonoTouchで付

あなたはそれをテストしたい場合は、あなたがEnvironment.GetFolderPath(Environment.SpecialFolder.Personal);

で、アプリのDocumentsフォルダのパスを取得することができ、これはに「out.txtを」というファイルを作成しますいくつかの非常に簡単なコードですあなたのアプリのDocumentsフォルダ。このコードは、ファイルの内容を読み込んで作成したことを表示します。さらに検証するには、シミュレータのアプリケーションフォルダに移動し、変更された日付までにアプリケーションフォルダを並べ替え、最後に変更したものをドリルダウンして、フォルダには「out.txt」があります(アプリケーションのインストール時に「2B3CA854-FADB-4DDC-9732-0E61B3DD8D8C」のような名前のフォルダ内に詰め込まれるため、名前によってアプリケーションのフォルダを見つけることができませんだから、

// For this to function, don't forget "using System.IO;" 

// If you're just playing around with this to see it work, place it inside 
// your AppDelegate's "FinishedLaunching" method in main.cs 

string path = Environment.GetFolderPath (Environment.SpecialFolder.Personal); 
string filePath = Path.Combine(path, "out.txt"); 

// File.WriteAllText will create a file and then write text to it. If the 
// file already exists, File.WriteAllText will overwrite it. 
File.WriteAllText(filePath, "Howdy, world."); 

// Now we prove it worked by reading the contents of the file and then 
// printing them to the console... 
string text = File.ReadAllText(filePath); 
Console.WriteLine(text); 

、だここで唯一のもの: - 「彼らはこのような場合には、次のコード)が含まれてどんなアプリで、最後に変更アプリ、にあなたを指すようになります変更された日付でフォルダをソート本当にiPhone固有のことは、 "Environment.SpecialFolder.Personal"があなたのアプリのDocumentsフォルダにマップされていることです。それを超えて、それはいつものように.Netです。

そして、再び、これはおそらく行き過ぎだったが、私はそれを見て皆のために十分に徹底的にお答えしたい - これが役に立てば幸い:)が

+2

ロリーロリー!素晴らしい説明。それは絶対に完璧だった!本当にありがとう! – Bryan

+0

喜んで助けてください:) –

+0

ありがとう、私はシミュレータが異なる書き込み権限で動作するようにこれで苦労しています。 –

8

あなたは、実行時にこのような何かを行うことができます。読み取りのために開くには、同じPath.Combine()を使用しますが、StreamReaderを使用してください。

+0

おかげゴンサロ!私はそれを試して待つことができません。 – Bryan