iOS中的文件读写错误

时间:2016-05-07 10:28:48

标签: ios file exception unity3d

我使用以下代码进行文件读写。

 private void StorePuzzleData ()
 {
     FileInfo fileInfo = new FileInfo (Application.persistentDataPath + "\\" + difficultyLevel + puzzleId + ".txt");

     if (fileInfo.Exists)
         fileInfo.Delete ();

     string fileData = string.Empty;

     foreach (CellInformation cellInfo in cellInfoList)
         fileData += cellInfo.RowIndex + "#" + cellInfo.ColIndex + "#" + cellInfo.number + "#" + cellInfo.CellColor + "#" + cellInfo.CellDisplayColor + "#" + (cellInfo.IsGroupComplete ? 1 : 0) + ",";

     StreamWriter streamWriter = fileInfo.CreateText ();
     streamWriter.WriteLine (fileData);
     streamWriter.Close ();

     DataStorage.StorePuzzleTimePassed (difficultyLevel, puzzleId, GameController.gamePlayTime);

 }

 private void ReadPuzzleData ()
 {
     // format:  rownumber, colnumber, number, cellcolor, celldisplaycolor, isgroupcomplete

     StreamReader streamReader = File.OpenText (Application.persistentDataPath + "\\" + difficultyLevel + puzzleId + ".txt");
     string fileData = streamReader.ReadLine ();
 }

但是我在实际运行的iOS设备中遇到以下错误。此代码在iMac以及Android设备中正常工作。

enter image description here

enter image description here

请给我一些建议,我需要做些什么改变才能做到这一点。

1 个答案:

答案 0 :(得分:4)

您似乎在类Unix(Apple Mac OS)环境中使用Windows风格的路径。请注意,在Windows上,您有一个带反斜杠的路径,如

   C:\Users\Maxi\Desktop

在类Unix系统上,但是像

  /var/mobile/Containers

你注意到在错误的路径中你混合了正斜率和反斜杠,这使路径无效。

/var/mobile/Containers/Data/Application/2.....\debutan1.txt

始终生成正确路径的正确方法是使用Path.Combine(string, string)函数。这将使用正确的目录路径分隔符组合两个路径,也可以通过Path.DirectorySeparatorChar单独访问。

因此,为了使您的代码正确,您可以

 using System.IO; /* must be imported */

 private void StorePuzzleData ()
 {
     FileInfo fileInfo = new FileInfo (Path.Combine(Application.persistentDataPath, difficultyLevel + puzzleId + ".txt"));

     if (fileInfo.Exists)
         fileInfo.Delete ();

     string fileData = string.Empty;

     foreach (CellInformation cellInfo in cellInfoList)
         fileData += cellInfo.RowIndex + "#" + cellInfo.ColIndex + "#" + cellInfo.number + "#" + cellInfo.CellColor + "#" + cellInfo.CellDisplayColor + "#" + (cellInfo.IsGroupComplete ? 1 : 0) + ",";

     StreamWriter streamWriter = fileInfo.CreateText ();
     streamWriter.WriteLine (fileData);
     streamWriter.Close ();

     DataStorage.StorePuzzleTimePassed (difficultyLevel, puzzleId, GameController.gamePlayTime);

 }

 private void ReadPuzzleData ()
 {
     // format:  rownumber, colnumber, number, cellcolor, celldisplaycolor, isgroupcomplete

     StreamReader streamReader = File.OpenText (Path.Combine(Application.persistentDataPath, difficultyLevel + puzzleId + ".txt"));
     string fileData = streamReader.ReadLine ();
 }

如果仍然出现“拒绝访问”错误,则必须是因为文件许可。然后发布ls -la <thatpath>的输出。