哪里应该存储一个存储文件

时间:2018-05-18 07:07:29

标签: c# xamarin.forms uwp

我有一个Xamarin Forms应用程序,我想在其中读取一个txt文件。在我的android项目中,文件放在assets文件夹中,包含以下属性:

构建操作:Android资产

复制选项:Allways复制。

我能用这段代码阅读文件:

    public string GetAppSetting(string name)
    {
        string retVal = "";
        try
        {
            using (StreamReader sr = new StreamReader(AndroidHelper.Assets.Open("AppSettings.txt")))
            {
                var result = sr.ReadToEnd().Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
                foreach (var line in result)
                {
                    if (line.StartsWith(name + ":"))
                        return line.Split(':')[1];
                }
            }
        }
        catch (Exception ex)
        {
            ParseError(ex, "GetConnectionString");              
        }
        return retVal;
    }

另一方面,在uwp项目中,我总是发现异常File Not Found!

我将文件放在项目的根目录中,并尝试放入assets文件夹。它不会改变结果。文件未找到!

构建行动:内容(也尝试了其他选项)。

复制选项:Allways复制。

这是我读取文件的代码:

 private async Task<string> ReadFileAsync(string name)
    {
        string retVal = "parameter not found";

        try
        {
            Windows.Storage.StorageFolder storageFolder = Windows.Storage.ApplicationData.Current.LocalFolder;
            Windows.Storage.StorageFile sampleFile =  await storageFolder.GetFileAsync("AppSettings.txt");
            string str = await Windows.Storage.FileIO.ReadTextAsync(sampleFile);

            foreach (var line in str.Split(new string[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries))
            {
                if (line.StartsWith(name + ":"))
                    return line.Split(':')[1];
            }

        }
        catch (Exception ex)
        {
            MainHelper.ParseError(ex, "UWP readFileAsync");
        }

        return retVal;
    }

我的代码出了什么问题?或者我应该在哪里放置AppSettings.txt?

1 个答案:

答案 0 :(得分:1)

对于UWP, 我建议你将文件设置为&#34;嵌入式资源&#34; (构建行动)

为确保您的文件在运行时作为嵌入式资源加载,您可以枚举所有程序集的资源,如下所示:

public function up()
    {
        DB::statement("ALTER TABLE <table_name> MODIFY COLUMN <col_name> <col_description> AFTER <second_col_name>");

    }

    public function down()
    {
        DB::statement("ALTER TABLE <table_name> MODIFY COLUMN <col_name> <col_description> AFTER <second_col_name>");
    }

然后,您可以像这样打开文件:

var resourceNames = anotherSameResAssemblyInstance.GetType()
             .GetTypeInfo().Assembly
             .GetManifestResourceNames();

YourAppNamespace &#39;是应用程序中嵌入文件的命名空间。要获取正确的全名,只需检查string myFileResourceStream = "{YourAppNamespace}.AppSettings.txt"; var myFileResourceStream = someAssembly.GetManifestResourceStream(name); 方法返回的所有值。

<强> 实施例

GetManifestResourceNames()

现在应该可以了。