自上次运行应用程序以来如何检查用户是否修改了文件

时间:2017-01-22 00:33:51

标签: c#

我正在制作一个简单的闲置游戏作为副项目。我目前让游戏将数据保存到文本文件中,以便下次运行应用程序时加载数据并计算离线时获得的分数。我想确保用户无法编辑此文件以获得更高的分数。我的第一个想法是加密文件,但这对我来说似乎有点太高级,所以我决定只在用户尝试编辑文件时重置分数。这就是我所拥有的。

以下是我使用的两个DateTime变量。

DateTime dtPast = DateTime.Now; //The date since last login
DateTime lastModified = System.IO.File.GetLastWriteTime("\\SavedGame.txt");

每次游戏保存时都会更新dtPast,即每100毫秒。 (我已尝试从1毫秒到1秒,没有工作)

然后我测试两个日期是否匹配,如果他们没有,那么它会重置所有变量。

            if (lastModified != dtPast)
            {
                //button
                intButton = 1;
                decNumber = 0;
                intAutoClicks = 0;


                //items
                //item 1
                intItem1 = 0;
                intItem1Lvl = 0;
                intItem1Prc = 10;

                //item 2
                intItem2 = 0;
                intItem2Lvl = 0;
                intItem2Prc = 250;

                //item 3
                intItem3 = 0;
                intItem3Lvl = 0;
                intItem3Prc = 5000;

                //item 4
                intItem4 = 0;
                intItem4Lvl = 0;
                intItem4Prc = 100000;

                //item 5
                intItem5 = 0;
                intItem5Lvl = 0;
                intItem5Prc = 1000000;

                //item 6
                intItem6 = 0;
                intItem6Lvl = 0;
                intItem6Prc = 25000000;

                //item 7
                intItem7 = 0;
                intItem7Lvl = 0;
                intItem7Prc = 1000000000;

                //item 8
                intItem8 = 0;
                intItem8Lvl = 0;
                intItem8Prc = 100000000000;

                //upgrades

                //upgrade 1
                // upgrade 1 is intButton
                intUpgrade1Lvl = 1;
                intUpgrade1Prc = 100;

                //upgrade 2
                intUpgrade2 = 0;
                intUpgrade2Lvl = 0;
                intUpgrade2Prc = 1000;

                //upgrade 3
                intUpgrade3 = 0;
                intUpgrade3Lvl = 0;
                intUpgrade3Prc = 100000;

                //upgrade 4
                intUpgrade4 = 0;
                intUpgrade4Lvl = 0;
                intUpgrade4Prc = 1500000;

                //Upgrade 5
                // upgrade 5 is intButton
                intUpgrade5Lvl = 0;
                intUpgrade5Prc = 10000000;
            }

唯一的问题是这似乎不起作用,我不知道为什么。正如我所说,我已经尝试将dtPast降低到几毫秒,但它不起作用。我也试过要求他们在彼此的一秒之内,但这也不起作用。

2 个答案:

答案 0 :(得分:0)

Mathias在评论中回答。

if(dtPast.AddMilliseconds(-100) < lastModified)

没用,所以我尝试了

if(dtPast.AddMilliseconds(1000) < lastModified)

并且效果很好。

答案 1 :(得分:0)

您可以使用this库用密码压缩文件,但用户无法更改密码,因此用户无法更改密码。确保你没有输入密码1234;)

using (var zipped = new ZipFile())
{
    zipped.Password= "Vx*!~zSecret!!";
    zipped.AddFile("Score.txt");
    zipped.Save("Archive.zip"); 
}