从清单中提取数据并使用这些数据获取更新
本文关键字:数据获取 更新 单中 提取 数据 | 更新日期: 2023-09-27 18:20:42
我正在为一个朋友正在创建的游戏创建一个启动器。
我正在尝试读取更新清单,以获取需要下载的新文件
现在我已经把文件放好了,但我不知道如何阅读
文件行如下Md5然后是File类似于checksum.md5将包含d41d8cd98f00b204e9800998ecf8427e*apples.txt
我被难住了,我试着用把它放在两个单独的列表中
thearray.replace(" ", "").split('*');
但它很长,似乎我不需要这么长的代码。我需要从文件的行是要从当前目录中读取的文件(如果我能找到一些如何拆分/组织它,我可以这样做)
现在,这是我试图摆脱的,但被难住了。。
var main = new frmMain();
if (File.Exists("checksums.md5")) { File.Delete("checksums.md5"); }
main.Download(updateurl + "checksums.md5", "checksums.md5");
string[] checksumfile = System.IO.File.ReadAllText("checksums.md5").Replace(" ", "").Split('*');
我现在该怎么做才能让它按我想要的方式运行?。。使用checksum.md5检查所有文件,并将需要更新的文件放入稍后更新的列表中。。
需要明确的是(我没有很好地解释)checksum.md5中的文件将有这样的路径
d41d8cd98f00b204e9800998ecf8427e*文件夹''apples.txt
在网站上,文件将在updateurl/files/folder/apples.txt中
在客户端/启动器上,文件将位于。''文件夹''apples.txt
感谢您的阅读!我知道如何做一些基本的事情,比如,为了被使用和其他东西,这个想法一直困扰着我。
public static string updateurl = "http://localhost/files/";
看看这个:http://www.regular-expressions.info/repeat.html
这是一个非常有用的处理文本的工具。
如果你的文件看起来像这样:
[校验和][空格]*[文件路径][行尾]
[校验和][空格]*[文件路径][行尾]
[校验和][空格]*[文件路径][行尾]…
这种模式应该有效:
string pattern = @"(?<= [*])[^'r'n]*";
var matches = Regex.Matches(@sourceString, @pattern);
foreach (Match m in matches)
{
Console.Writeline(m.Value);
}
Regex类还有一个比String灵活得多的Replace方法。Replace
编辑
我不知道这是否有帮助,或者我是否再次完全误解了你:)如何组织你的数据的一些想法:
List<FileData> result = (from a in Regex.Split(s, @"'r'n").Cast<string>().Select(a => Regex.Split(a, @" [*]"))
select new FileData
{
Checksum= a[0],
Filepath = a[1],
ShouldUpdate = FileData.CheckShouldUpdate(a[0],a[1])
}).ToList();
或:
List<FileData> result = (from a in Regex.Split(s, @"'r'n").Cast<string>().Select(a => Regex.Split(a, @" [*]"))
where FileData.CheckShouldUpdate(a[0], a[1])
select new FileData
{
Checksum = a[0],
Filepath = a[1]
}).ToList();
class FileData
{
public string Checksum { get; set; }
public string Filepath { get; set; }
public bool ShouldUpdate { get; set; }
public FileData() { }
public static bool CheckShouldUpdate(string checksum, string filename)
{
// some check logic here...
return true;
}
}