Question

I'm having trouble accessing a text file that is packaged with my Windows Phone 8 app.

Here is the code:

var ResrouceStream = Application.GetResourceStream(new Uri("Data-Test.docx", UriKind.Relative));
if (ResrouceStream != null)
{
    Stream myFileStream = ResrouceStream.Stream;
    if (myFileStream.CanRead)
    {
        // logiic here
        retrun "Hi";
    }
}
else
{
    return "hello";
}

Seems simple but the app always returns "hello". i have placed the file in root and also in assets, changed it to content - copy and do not copy, resource copy and do not copy but always it returns "hello".

Spent several hours on this and all solutions I can find show the solution or very similar above!

What am I doing wrong?

EDIT: Returns "hello" when I deploy to phone or emulator. also tried "/Data-Test...", @"\Data-Text..., @/"Data-Test...!

UPDATE 1:

         string aReturn = "";
         var asm = Assembly.GetExecutingAssembly();

         //Use this to verify the namespacing of the "Embedded Resource".
         //asm.GetManifestResourceNames()
         //               .ToList()
         //               .ForEach(name => Debug.WriteLine(name));

         var ResourceStream = asm.GetManifestResourceStream("ContosoSocial.Assets.QuizQuestions.QuizQuestions-Test1.docx");

         if (ResourceStream != null) //  <--CHECKED AND DOES NOT EQUAL NULL
         {
             Stream myFileStream = ResourceStream;

             if (myFileStream.CanRead) // <-- CHEACKED AND CAN READ
             {
                 StreamReader myStreamReader = new StreamReader(myFileStream);

                 LOGIC & EXCEPTION HERE...?
                 string myLine = myStreamReader.ReadLine();
             }
             else
             {
                 aReturn = "myFileStream.CanRead = true";
             }
         }
         else
         {
             aReturn = "stream equals null";
         }
         Debug.WriteLine(aReturn);
     }

The assignment of myFileStream to a StreamReader object is throwing the exception null pointer. I thought I would wrap myFileStream to a StreamReader so I can read a line at a time..? This is my first c# project and I'm unfamiliar with it's syntax and classes.

UPDATE 2: OK I added...

 Debug.WriteLine(aReturn);

...following...

 string myLine = myStreamReader.ReadLine();

...and noticed it was retrieving only the 2 characters 'PK' ! So saved the .docx file as .txt and reinserted adn changed build copy to embedded - do not copy...Happy days it now pulls off the first line in the file.

Thanks to OmegaMan for your help with this one :-)

Was it helpful?

Solution

  1. Change file type in the project to Embedded Resource
  2. Extract the resource by working the namespace to its location. Here is an example code where I pull in an XSD:

Code:

var asm = Assembly.GetExecutingAssembly();

// Use this to verify the namespacing of the "Embedded Resource".
//  asm.GetManifestResourceNames()
//     .ToList()
//     .ForEach(name => Debug.WriteLine(name));

var f1 = asm.GetManifestResourceStream("UnitTests.Resources.NexusResponse.xsd");

Note this is not tested on WP8, but GetExecutingAssembly is stated to work within .Net. If you get the namespace wrong, uncomment out the code and display or debug to determine the resources and their namespace.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top