从清单中提取数据并使用这些数据获取更新

本文关键字:数据获取 更新 单中 提取 数据 | 更新日期: 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;
            }
        }