我有一个文本文件,其中包含300,000个单词的列表以及它们出现的频率.每行的格式为Word:FequencyOfOccurence.
我希望可以从C#代码中访问此信息.我不能硬编码列表,因为它太长了,我不知道如何从服务器上的文件访问它.理想情况下,我理想情况下只有在使用时才能下载信息(节省带宽)但这不是一个高优先级,因为文件不是太大而且互联网速度总是在增加.
它不需要用于绑定.
项目构建完成后,无需编辑该信息. 最佳答案 这是另一种选择.压缩文件并将其粘贴在应用程序XAP旁边的clientBin文件夹中.然后在应用程序中需要内容的地方执行以下操作: –
public void GetWordFrequencyResource(Action<string> callback)
{
WebClient client = new WebClient();
client.OpenReadAsync += (s, args) =>
{
try
{
var zipRes = new StreamResourceInfo(args.Result, null)
var txtRes = Application.GetResourceStream(zipRes, new Uri("WordFrequency.txt", UriKind.Relative));
string result = new StreamReader(txtRes.Stream).ReadToEnd();
callback(result);
}
catch
{
callback(null); //Fetch failed.
}
}
client.OpenReadAsync(new Uri("WordFrequency.zip", UriKind.Relative"));
}
用法:-
var wordFrequency = new Dictionary<string, int>();
GetWordFrequencyResource(s =>
{
// Code here to burst string into dictionary.
});
// Note code here is asynchronous with the building of the dictionary don't attempt to
// use the dictionary here.
上面的代码允许您以高效的zip格式存储文件,但不能在XAP本身中存储.因此,您可以按需下载它.它利用了XAP是一个zip文件的事实,因此可以在zip文件上使用旨在从XAP文件中提取资源的Application.GetResourceStream.
顺便说一句,我实际上并不建议你使用字典,我只是用字典作为简单的例子.实际上我会想象文件是按顺序排列的.如果是这种情况,您可以使用KeyValuePair< string,int>对于每个条目,但创建一个自定义集合类型,将它们保存在数组或列表中,然后使用一些二进制搜索方法来索引它.