2016-10-06 2 views
1

Мне нужно сохранить некоторые данные локально на устройстве iOS для игры Unity. Unity предоставляютDirectory.createDirectory создает файлы вместо каталога в iOS

Application.persistentDataPath 

Чтобы получить общий каталог для сохранения данных. И распечатка на консоли показывает, что этот путь, возвращаемый для iOS, правильный, т.е./Users/userName/Library/Developer/CoreSimulator/Devices/******** - **** - **** - *** * - ************/данные/Контейнеры/Data/Application/************ - ******** - *** *********/Documents/

Таким образом, одна функция возвращает путь и другую проверку, существует ли каталог, если он не должен создавать каталог, но он создает ФАЙЛ без какого-либо расширения. Вот мой код

void savePose(Pose pose){ 

     if (!Directory.Exists(PoseManager.poseDirectoryPath())){ 
      Directory.CreateDirectory(PoseManager.poseDirectoryPath()); 
      //Above line creates a file 
      //by the name of "SavedPoses" without any extension 
     } 
     // rest of the code goes here 
    } 

    static string poseDirectoryPath() { 
     return Path.Combine(Application.persistentDataPath,"SavedPoses"); 
    } 

ответ

1

Возможные sloutions:

. Path.Combine(Application.persistentDataPath,"SavedPoses"); добавляет косую черту перед savedPoses, а другие - косые черты. Возможно, это вызывает проблему в iOS. Попробуйте выполнить конкатенирование исходной строки без функции Path.Combine.

static string poseDirectoryPath() { 
    return Application.persistentDataPath + "/" + "SavedPoses"; 
} 

.Если Directory класса не работает должным образом, используйте DirectoryInfo класс.

private void savePose(Pose pose) 
{ 
    DirectoryInfo posePath = new DirectoryInfo(PoseManager.poseDirectoryPath()); 

    if (!posePath.Exists) 
    { 
     posePath.Create(); 
     Debug.Log("Directory created!"); 
    } 
} 

static string poseDirectoryPath() 
{ 
    return Path.Combine(Application.persistentDataPath, "SavedPoses"); 
} 

EDIT:

Скорее всего проблема разрешения на прошивке.

Вы можете создать папку в каталоге StreamingAssets. У вас есть разрешение на чтение и запись в этот каталог.

Общий способ доступа к этому файлу - Application.streamingAssetsPath/.

На iOS также можно получить доступ с помощью Application.dataPath + "/Raw".

На Android также можно получить доступ с помощью "jar:file://" + Application.dataPath + "!/assets/"; и для Windows и Mac с Application.dataPath + "/StreamingAssets";. Просто используйте ту, которая работает для вас.

На ваш вопрос Application.dataPath + "/Raw"+"/SavedPoses"; должен это сделать.

+0

** 1. ** Это был мой первоначальный код, изменивший его после проверки другого вопроса. И поскольку я упоминал, что сгенерированный путь верен с прямой косой чертой в обоих случаях (необработанная строка и Path.Combine) ** 2 ** Это также создает такую ​​же проблему. – ibnetariq

+0

Что такое версия Unity и что такое версия iOS, на которую вы тестируете это? – Programmer

+0

Unity = 5.4.1f1, Xcode = 7.3.1, Simulator = iPhone 5S и iOS = 9.3. Такая же проблема возникает и на устройстве. Я использую симулятор, чтобы я мог просматривать каталог документов из Finder – ibnetariq

Смежные вопросы