Home > Software design >  C# (xamarin project) not able to find path to the file
C# (xamarin project) not able to find path to the file

Time:03-18

I have this problem when I'm trying to read JSON file (or any file): It's not able to find that file. I try everything, even the absolute path (error almost same - DirectoryNotFound)

enter image description here

This is structure of mine code:

enter image description here

And this is code:

private void LoadJson()
{
    
    using (var r = new StreamReader("quizQuestions.json"))
    {
        string json = r.ReadToEnd();
        items = JsonConvert.DeserializeObject<List<Questions>>(json);
    }
}
    

I I even try to use Directory.GetCurrentDirectory() but it's returning : / -> only this character. I don't know where is a mistake or if I forgot to set something. I try to find answers everywhere but I was not able to find anything with this.

CodePudding user response:

Make sure the Build Action of the file is set as Content or as an Asset and give this a try.

private void LoadJson()
{
    AssetManager assets = this.Assets;
    using (var r = new StreamReader(assets.Open ("quizQuestions.json")))
    {
        string json = r.ReadToEnd();
        items = JsonConvert.DeserializeObject<List<Questions>>(json);
    }
}

CodePudding user response:

You can configure the file as Embedded Resource and then access it like this:

public static Stream GetEmbeddedResourceStream(Assembly assembly, string resourceFileName)
{
    var resourceNames = assembly.GetManifestResourceNames();
    var resourcePaths = resourceNames
            .Where(x => x.EndsWith(resourceFileName, StringComparison.CurrentCultureIgnoreCase)).ToArray();

    if (resourcePaths.Any() && resourcePaths.Count() == 1)
    {
        return assembly.GetManifestResourceStream(resourcePaths.Single());
    }
    return null; // or throw Exception
}

private void LoadJson()
{
    Assembly assembly = GetAssemblyContainingTheJson();
    using (var r = GetEmbeddedResourceStream(assembly, "quizQuestions.json"))
    {
        string json = r.ReadToEnd();
        items = JsonConvert.DeserializeObject<List<Questions>>(json);
    }
}
  • Related