Search Unity

Reading a file (xml) from StreamingAssets

Discussion in 'VR' started by razielanarki, Jun 10, 2016.

  1. razielanarki

    razielanarki

    Joined:
    Jun 1, 2014
    Posts:
    58
    I'm trying to open an XML from StreamingAssets, but when running the app on hololens, the following error occurs:

    Code (csharp):
    1. UnauthorizedAccessException: Access to the path 'C:\Data\Users\DefaultAccount\AppData\Local\DevelopmentFiles\HoloDemoVS.Release_x86.razie\Data\StreamingAssets\airplanes2.dat' is denied.
    2.  
    3.    at System.IO.Win32FileStream.Init(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs)
    4.    at System.IO.Win32FileSystem.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, FileStream parent)
    5.    at System.IO.MultiplexingWin32WinRTFileSystem.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, FileStream parent)
    6.    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
    7.    at Suffix.AppRoot.Load()
    8.    at Suffix.AppRoot.Awake()
    9.    at Suffix.AppRoot.$Invoke0(Int64 instance, Int64* args)
    10.    at UnityEngine.Internal.$MethodUtility.InvokeMethod(Int64 instance, Int64* args, IntPtr method)
    11. (Filename: <Unknown> Line: 0)

    i understand that file permissions work differently under UWP, but i'm very new to it (uwp), and a little stumped as to how i could solve/work around this problem.
     
  2. Tautvydas-Zilys

    Tautvydas-Zilys

    Unity Technologies

    Joined:
    Jul 25, 2013
    Posts:
    10,680
    That's weird. Can you show the code you use to open the file?
     
  3. razielanarki

    razielanarki

    Joined:
    Jun 1, 2014
    Posts:
    58
    nothing special, like this (it works in the editor):


    Code (CSharp):
    1.  
    2. List<Dictionary<string, object>> data = new List<Dictionary<string, object>> ();
    3. DataContractSerializer serializer = new DataContractSerializer (data.GetType (), knownTypes);
    4.  
    5. using (FileStream fs = File.Open (Path.Combine (Application.streamingAssetsPath, filename), FileMode.Open))
    6.     data = (List<Dictionary<string, object>>) serializer.ReadObject (fs);
     
    Last edited: Jun 12, 2016
  4. Tautvydas-Zilys

    Tautvydas-Zilys

    Unity Technologies

    Joined:
    Jul 25, 2013
    Posts:
    10,680
    Does that code work when you run it as UWP on a local machine? Or do you get the same error too?
     
  5. razielanarki

    razielanarki

    Joined:
    Jun 1, 2014
    Posts:
    58
    haven't tried it yet, did now, and it gives a similar error

    Code (CSharp):
    1. Exception thrown: 'System.UnauthorizedAccessException' in System.IO.FileSystem.dll
    2. UnauthorizedAccessException: Access to the path 'F:\Unity\HoloSuffix\Builds\UWP\Demo\bin\x86\Release\AppX\Data\StreamingAssets\airplanes2.dat' is denied.
    3.    at System.IO.Win32FileStream.Init(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs)
    4.    at System.IO.Win32FileSystem.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, FileStream parent)
    5.    at System.IO.MultiplexingWin32WinRTFileSystem.Open(String fullPath, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, FileStream parent)
    6.    at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
    7.    at Suffix.AppRoot.Load()
    8.    at Suffix.AppRoot.Awake()
    9.    at Suffix.AppRoot.$Invoke0(Int64 instance, Int64* args)
    10.    at UnityEngine.Internal.$MethodUtility.InvokeMethod(Int64 instance, Int64* args, IntPtr method)
    11. (Filename: <Unknown> Line: 0)
     
  6. Tautvydas-Zilys

    Tautvydas-Zilys

    Unity Technologies

    Joined:
    Jul 25, 2013
    Posts:
    10,680
    razielanarki likes this.
  7. razielanarki

    razielanarki

    Joined:
    Jun 1, 2014
    Posts:
    58
    thanks!

    using File.ReadAllbytes to read bytes into buffer, and using a MemoryStream to deserialize solved the issue.
     
  8. SaxonDruce

    SaxonDruce

    Joined:
    Aug 15, 2016
    Posts:
    1
    You may need:

    Code (CSharp):
    1. File.Open(path, FileMode.Open, FileAccess.Read)
    Otherwise File.Open(path, FileMode.Open) tries to open the file in FileAccess.ReadWrite by default, and that path probably doesn't have write permissions.
     
    Yellow-Submarine likes this.
  9. MohsenneChaverdie

    MohsenneChaverdie

    Joined:
    Nov 23, 2016
    Posts:
    39
    It solved it for me as well.
     
  10. fireworkme

    fireworkme

    Joined:
    Aug 20, 2018
    Posts:
    1
  11. technoseeker123

    technoseeker123

    Joined:
    Jan 7, 2020
    Posts:
    2
    can you give some example?