0

我需要一种方法来存储最小的时间来替换任何现有的,但目前我尝试过的[下面]不起作用,有时可能会说 2:38.4 小于 2:20.1。

在文本文件中

88:88:8

在表单 3 文本框中

timerMin
timerSec
timerMil

写入正确的路径。

                using (TextReader reader = File.OpenText(pathPlayer + player[id].name + "\\time.txt"))
                {
                    string z = reader.ReadLine();
                    string[] zsplit = z.Split(':');
                    reader.Close();
                    fileMin = Convert.ToInt32(timerMinute.Text);
                    recMin = Convert.ToInt32(zsplit[0]);
                    if (fileMin < recMin)
                    {
                        File.WriteAllText(pathPlayer + player[id].name + "\\time.txt", timerMinute.Text + ":" + timerSecond.Text + ":" + timerMili.Text);
                        newPersonalRecord = true;
                    }
                    else
                    {
                        fileSec = Convert.ToInt32(timerSecond.Text);
                        recSec = Convert.ToInt32(zsplit[1]);
                        if (fileSec < recSec)
                        {
                            File.WriteAllText(pathPlayer + player[id].name + "\\time.txt", timerMinute.Text + ":" + timerSecond.Text + ":" + timerMili.Text);
                            newPersonalRecord = true;
                        }
                        else
                        {
                            fileMil = Convert.ToInt32(timerMili.Text);
                            recMil = Convert.ToInt32(zsplit[1]);
                            if (fileMil < recMil)
                            {
                                File.WriteAllText(pathPlayer + player[id].name + "\\time.txt", timerMinute.Text + ":" + timerSecond.Text + ":" + timerMili.Text);
                                newPersonalRecord = true;
                            }
                            else
                            {

                            }
                        }
                    }

                }

我已经为此工作了很长一段时间,但我看不出我哪里出了问题,并且帮助会很棒。

谢谢

4

3 回答 3

2

当您应该比较 TimeSpan 时,您正在比较文本框

如果文件中的字符串不超过一天中的时间(最多“23:59:59”),那么您可以使用这些字符串来创建 TimeSpan,TimeSpan.Parse("18:44:08");并像这样比较它们

                fileMin = new TimeSpan(0, 0, int.Parse(timerMin), int.Parse(timerSec), int.Parse(timerMil));
                recTimeSpan = TimeSpan.Parse(z);

                if(fileMin > recTimeSpan)
                {// Your code}
                else
                {// Your code}

你总能做到

                recTimeSpan = new TimeSpan(0, 0, int.Parse(zsplit[0]), int.Parse(zsplit[1]), int.Parse(zsplit[2]));
于 2013-08-12T13:10:31.413 回答
1

这更像是一个设计俏皮话,但我强烈建议您将TimeSpan类用于此类而不是整数;这将使您的代码更容易编写和阅读。您可以根据正在检索的时间数据构造一个新的 TimeSpan,然后只需使用一个比较运算符来确定它是否大于、小于或等于现有记录,而不是一个用于秒和毫秒而没有分钟的记录。

如果您使用 DateTime 来跟踪开始和结束时间, DateTime也可以工作(只需使用减法运算符,您就可以很容易地找到 DateTimes 作为 TimeSpan 之间的差异)

例如:

DateTime StartTime
DateTime EndTime 
TimeSpan difference = EndTime = StartTime 
于 2013-08-12T13:25:31.817 回答
0

你的代码有很多重复,你应该努力消除这些重复。您还可以使用TimeSpan来存储值并进行比较。

尝试这样的事情:

string filePath = pathPlayer + player[id].name + "\\time.txt";
string z = null;
using (TextReader reader = File.OpenText(filePath))
{
    z = reader.ReadLine();
}
string[] zsplit = z.Split(':');

//Create a timespan from the values read from the .txt file
TimeSpan fileTime = new TimeSpan(0, 0, int.parse(zsplit[0]), int.parse(zsplit[1]), int.parse(zsplit[2]));
//Create a timespan from the values stored in the Textbox controls
TimeSpan inputTime = new TimeSpan(0, 0, int.parse(timerMinute.Text), int.parse(timerSecond.Text), int.parse(timerMili.Text));

//Check if the new TextBox time is faster than the time stored in the file
if(inputTime < fileTime)
{
    //new faster time, so update the file
    File.WriteAllText(filePath, inputTime.ToString("mm:ss:f"));
    newPersonalRecord = true;
}

需要注意的几点:

  • 输入没有验证,因此无效数据会使应用程序崩溃(您应该添加验证,请参阅:)int.TryParse。您还需要验证z不为空,并且至少zsplit有一个Length3
  • 您的命名fileMinrecMin您的数据源不匹配,我将它们重命名为fileTime并且inputTime更清楚
  • 这个例子检查是否inputTime小于fileTime,如果你想要它,那么只需在if语句中切换它们
  • 此示例中的使用TimeSpan假定分钟分量永远不会大于59
于 2013-08-12T13:24:52.890 回答