我该如何在Monotouch iPhone应用程序中创建和写入文件?
这个文件应该在应用程序启动之间持久存在,因此我想它必须放置在应用程序包中的某个位置(文档或资源?)。
我该如何在Monotouch iPhone应用程序中创建和写入文件?
这个文件应该在应用程序启动之间持久存在,因此我想它必须放置在应用程序包中的某个位置(文档或资源?)。
您有几个选项(当然)。我假设您已经在某种程度上熟悉 .Net,并且您的问题更多地是关于如何以iPhone方式执行此操作。
每个iPhone应用程序(您将在OS X上看到相同的内容)都是一个“bundle”,它不是传统意义上的可执行文件,而实际上是一个文件夹层次结构,其中包含您的应用程序二进制文件(以及资源、设置等)。
由于iPhone应用程序的超级沙盒,您无法访问通常在桌面开发中可以使用的共享文件夹(例如,位于用户主文件夹下的常用文档文件夹,应用程序可以访问该文件夹)。
相反,您的应用程序具有其自己的文件夹层次结构,就像其自己的一组通常在应用程序之间共享的文件夹。
查看iPhone模拟器用于应用程序安装、设置等的文件夹是查看您的应用程序文件夹结构的最简单方法。在我的机器上(我不记得这是否可配置,但在您的系统上可能是相同的),您可以通过以下路径访问该文件夹:
〜/Library/Application Support/iPhone Simulator
其中有一个User/Applications文件夹,其中包含您已安装到模拟器的应用程序。进入其中任何一个文件夹,您都可以查看应用程序将在手机上访问的文件夹结构。
对于要在应用程序会话之间保留的文件,您的应用程序文档文件夹是合适的位置。这不是创建文件的唯一选择,但这是此工作的正确选择。除了正确存储您的文件外,将它们保存在文档文件夹中还将使它们在用户同步时由iTunes备份。
使用MonoTouch,您可以使用Environment.GetFolderPath(Environment.SpecialFolder.Personal);
获取应用程序文档文件夹路径。
// 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”映射到您应用程序的文档文件夹。除此之外,它就像往常一样使用 .Net。
而且,可能这有点过度,但我想为每个看到它的人充分回答。
using (StreamWriter writer = new StreamWriter (Path.Combine (Environment.SpecialFolders.Documents, "yourfilename.ext"))) { }
这将会创建一个文件。要打开它以进行读取,请使用相同的Path.Combine()
,但使用StreamReader。