2009-12-02 30 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