Как редактировать XML-файл в Streamingassets из моей hololens - PullRequest
2 голосов
/ 08 мая 2019

У меня действительно неприятная проблема с моим приложением, я использую Vuforia и пытаюсь отредактировать и сохранить xml в потоковых наборах из среды выполнения, однако я получаю следующее исключение: Unauthorizedaccessexception ... доступ к пути отказано.

Я пытался сохранить оба, просто используя сохранение своего XMLDocument по пути, здесь я получаю Unauthorizedaccessexception, но также пытался, но также и пространство имен Windows.Storage, и здесь я получаю исключение, говорящее, что мой путь неверен.

Здесь я получаю исключение несанкционированного доступа:

xmlDoc.Save(path);

и здесь я получаю неверный путь назад.

var folderPath = Path.Combine(Application.streamingAssetsPath, "Vuforia");
StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(folderPath);
StorageFile textFile = await folder.GetFileAsync("Warehouse.xml");
await FileIO.WriteTextAsync(textFile, str);

Использование var folderPath = Path.Combine(Application.persistentDataPath); для сохранения файла с xmlDoc.Save(path); работает отлично. Я не могу сделать это, хотя из-за того, что Vuforia только может получить доступ к целевым изображениям в StreamingAssets (верно?). Так кто-нибудь имеет представление о том, что я делаю неправильно, что я могу сделать, чтобы получить доступ к папке StreamingAssets или изменить местоположение папки, которую использует Vuforia?

1 Ответ

3 голосов
/ 08 мая 2019

На HoloLens у меня тоже были проблемы.

Возможно, вы захотите попробовать StreamWriter.WriteAsync в сочетании с File.Open(string, FileMode, FileAccess, FileShare).

Мне кажется, что HoloLens требует File.Open с FileMode.Open , FileAccess.Write и FileShare.Write .

Также я бы предложил использовать Path.Combine(string, string, string)

что-то вроде

var filePath = Path.Combine(Application.streamAssetsPath, "Vuforia", "Warehouse.xml");

using(var fileStream = File.Open(filePath, FileMode.Open, FileAccess.Write, FileShare.Write)) 
{
    using (var writer = new StreamWritet(fileStream))
    {
        await writer.WriteAsync(textFile);
    }
}

это обычно работало для меня в прошлом.


Заметьте, однако, что я, честно говоря, никогда не пытался писать в streamingAssetsPath из сборки, только внутри UnityEditor в сценариях редактора. А в билдах только постоянный путь к данным. Возможно, что потоковые ресурсы доступны только для чтения во встроенном приложении.


Печатается на смартфоне, поэтому никаких гарантий, но я надеюсь, что идея проясняется

...