2009-12-02 32 views
32

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

该文件应应用程序启动之间依然存在,所以我想它必须在App束某处放置(文件或资源?)。

回答

100

[注:我的回答是非常彻底的,因为我不知道知道您对应用程序包或您的iPhone应用程序的沙盒中的小世界结构的了解程度 - 道歉,如果我盖你已经知道的东西 - 我更喜欢写一点不是太少太多,而且增加了一点为什么的当讨论如何 ...]

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

每一个iPhone应用程序(你会看到在OS X应用程序一样的东西)是一种“捆绑”,这是不是传统意义上的可执行文件,但实际上是一个文件夹层次结构,你的应用程序二进制的生活里(以及资源​​,设置等)。

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

相反,你的应用程序有自己的文件夹层次结构就像自己的个人组通常跨应用程序共享的文件夹。

最简单的方法,看看您的应用程序的文件夹结构是什么样子的手机看iPhone模拟器使用的应用程序安装,设置,等等等等的文件夹。在我的机器(我不记得,如果这是可配置的,但它可能是您的系统上一样),你可以通过这条路径得到的文件夹:

~/Library/Application Support/iPhone Simulator

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

,用于存储你喜欢跨应用程序会话持久的文件,你的应用程序的文档文件夹是现货。这不是您创建文件的唯一选择,但它是此作业的首选。除了正确存储文件之外,当用户同步时,将它们保存在“文档”文件夹中还可以通过iTunes进行备份。

随着MonoTouch的,你可以得到Environment.GetFolderPath(Environment.SpecialFolder.Personal);

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

Rory Rory Rory!很好的解释。那绝对是完美的!非常感谢! – Bryan 2009-12-04 21:49:48

+0

很高兴帮助:) – 2009-12-05 02:05:53

+0

谢谢,我一直在努力,因为模拟器似乎可以处理不同的写入权限。 – 2010-02-10 11:48:48

8

您可以在运行时做这样的事情:

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

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

+0

贡萨洛谢谢!我迫不及待地尝试。 – Bryan 2009-12-02 00:53:03