35

如何在 Monotouch iPhone 应用程序中创建和写入文件?

该文件应该在应用程序启动之间持续存在,所以我猜它必须放在 App 包中的某个位置(文档或资源?)。

4

3 回答 3

106

[注意:我的回答非常彻底,因为我不知道您对应用程序包的理解程度或您的 iPhone 应用程序沙盒小世界的结构 - 如果我涵盖了您已经知道的内容,我深表歉意 - 我更喜欢写得太多而不是太少了,在讨论如何做的时候补充一点为什么……]

你有几个选择(当然)。我假设您在某种程度上已经熟悉 .Net,并且您的问题更多是关于如何通过 iPhone 方式做到这一点。

每个 iPhone 应用程序(您会在 OS X 上看到相同的应用程序)都是一个“捆绑包”,它不是传统意义上的可执行文件,而是实际上是一个文件夹层次结构,您的应用程序二进制文件存在于其中(以及资源、设置等)。

由于 iPhone 应用程序是超级沙盒化的,因此您无法访问在进行桌面开发时通常可以使用的共享文件夹(例如,位于用户主文件夹下的通用 Documents 文件夹)哪些应用程序可以访问)。

相反,您的应用程序有自己的文件夹层次结构,就像它自己的个人文件夹集,通常会在应用程序之间共享。

在手机上查看应用程序文件夹结构的最简单方法是查看 iPhone 模拟器用于应用程序安装、设置等的文件夹。在我的机器上(我不记得这是否可配置,但在您的系统上可能相同),您可以通过以下路径访问该文件夹:

~/Library/Application Support/iPhone Simulator

在其中,有一个 User/Applications 文件夹,其中包含您已安装到模拟器的应用程序。深入到这些文件夹中的任何一个,您可以看到您的应用程序可以在手机上访问的文件夹结构。

为了存储您希望在应用会话中持久保存的文件,您的应用的 Documents 文件夹就是最佳选择。它不是您创建文件的唯一选择,但它是这项工作的正确选择。除了正确存储文件之外,将它们保存在 Documents 文件夹中还会在用户同步时由 iTunes 备份它们。

使用 MonoTouch,您可以获取应用程序的 Documents 文件夹路径Environment.GetFolderPath(Environment.SpecialFolder.Personal);

如果您想对其进行测试,这是一些非常简单的代码,它将一个名为“out.txt”的文件写入您应用的 Documents 文件夹。此代码还读取文件的内容以显示它已创建 - 为了进一步验证,请转到模拟器的 Applications 文件夹,按修改日期对应用程序文件夹进行排序,深入查看最近修改的内容,并查看其 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。

而且,再次,这可能是矫枉过正,但我​​想为每个看到它的人充分彻底地回答 - 希望这会有所帮助:)

于 2009-12-04T04:02:46.923 回答
13

Xamarin.iOS 指南站点中的以下 How To 提供了一些指向文件存储位置的指针:

http://docs.xamarin.com/guides/ios/application_fundamentals/working_with_the_file_system/

于 2009-12-02T01:41:28.490 回答
8

您可以在运行时执行以下操作:

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

这将创建文件。要打开它进行阅读,请使用相同Path.Combine()但与StreamReader

于 2009-12-02T00:40:39.127 回答