阅读项目文本文件windows phone 8

时间:2014-05-14 14:23:59

标签: windows-phone-8 file-io

我无法访问随Windows Phone 8应用打包的文本文件。

以下是代码:

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";
}

看似简单,但应用程序总是返回“你好”。我已将文件放在root中,也放在资源中,将其更改为内容 - 复制并不复制,资源复制并且不复制但总是返回“hello”。

花费了几个小时的时间,我能找到的所有解决方案都显示了上述解决方案或非常相似!

我做错了什么?

编辑:当我部署到手机或模拟器时返回“hello”。 还试过“/ Data-Test ...”,@“\ Data-Text ...,@ /”数据测试......!

更新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);
     }

将myFileStream分配给StreamReader对象会引发异常空指针。我以为我会将myFileStream包装到StreamReader中,这样我就可以一次读取一行...?这是我的第一个c#项目,我不熟悉它的语法和类。

更新2: 好的我加了......

 Debug.WriteLine(aReturn);

... ...以下

 string myLine = myStreamReader.ReadLine();

...并注意到它只检索了2个字符'PK'! 所以将.docx文件保存为.txt并重新插入adn更改的构建副本到嵌入式 - 不要复制...快乐的日子它现在拉掉文件中的第一行。

感谢OmegaMan对此的帮助: - )

1 个答案:

答案 0 :(得分:1)

  1. 将项目中的文件类型更改为Embedded Resource
  2. 通过将命名空间设置到其位置来提取资源。这是我拉入XSD的示例代码:
  3. 代码:

    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");
    

    请注意,这不是在WP8上测试的,但GetExecutingAssembly声称可以在.Net中使用。如果您的命名空间错误,请取消注释代码并显示或调试以确定资源及其命名空间。