我有一个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?
答案 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()
现在应该可以了。