How to read files from project folders?

2019-01-25 23:44发布

问题:

When the first time my app starts on a windows phone, I want to get some files(xml/images) from project folders and write them to the isolated storage .

How do I detect that my app is running for the first time?

How do I access file in project folders?

回答1:

If you mean project folders as in the folders in your visual studio project, I usually right click on the files and set the build action to 'Embedded Resource'. At runtime, you can read the data from the embedded resource like so:

// The resource name will correspond to the namespace and path in the file system.
// Have a look at the resources collection in the debugger to figure out the name.
string resourcePath = "assembly namespace" + "path inside project";
Assembly assembly = Assembly.GetExecutingAssembly();
string[] resources = assembly .GetManifestResourceNames();
List<string> files = new List<string>();

if (resource.StartsWith(resourcePath))
{
    StreamReader reader = new StreamReader(assembly.GetManifestResourceStream(resource), Encoding.Default);
    files.Add(reader.ReadToEnd());
}

To read the images you would need something like this to read the stream:

    public static byte[] ReadAllBytes(Stream input)
    {
        byte[] buffer = new byte[32 * 1024];

        using (MemoryStream ms = new MemoryStream())
        {
            int read;

            while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
            {
                ms.Write(buffer, 0, read);
            }

            return ms.ToArray();
        }
    }


回答2:

Here is another way to read files from your visual studio project. The following shows how to read a txt file but can be used for other file as well. Here the file is in the same directory as the .xaml.cs file.

var res = App.GetResourceStream(new Uri("test.txt", UriKind.Relative));
var txt = new StreamReader(res.Stream).ReadToEnd();

make sure your file is marked as Content.