1

テキストファイルを作成していますが、最後の行は「」です

    private void lastRunDate()
    {
        String lastLine = readLastDate();
        String[] date = lastLine.Split('/');
        DateTime dt = new DateTime(Int32.Parse(date[2]), Int32.Parse(date[0]), Int32.Parse(date[1]));
        DateTime currentDT = DateTime.Now;

        argValue = 1;

        if ((dt.Month == currentDT.Month) && (argValue == 0))
        {
            MessageBox.Show("This application has already been run this month");
            this.Close();                
        }
    }


    private void AddRecordToFile()
    {
        DateTime now = DateTime.Now;
        prepareToEmail();
        string path = filepath;
        bool dirtyData = true;
        // This text is added only once to the file. 
        if (!File.Exists(path))
        {
            // Create a file to write to. 
            using (StreamWriter sw = File.CreateText(path))
            {
                sw.Write(now.ToShortDateString());                    
            }
            dirtyData = false;
        }

        if (dirtyData)
        {
            // This text is always added, making the file longer over time 
            // if it is not deleted. 
            using (StreamWriter sw = File.AppendText(path))
            {
                sw.Write(now.ToShortDateString());
            }
        }            
    }

    private String readLastDate()
    {
        using (StreamReader sr = new StreamReader(filepath))
        {
            // Initialize to null so we are not stuck in loop forever in case there is nothing in the file to read
            String line = null;
            do
            {
                line = sr.ReadLine();
                // Is this the end of the file?
                if (line == null)
                {
                    // Yes, so bail out of loop
                    return "01/01/1900"; // I had to put something
                }
                // Is the line empty?
                if (line == String.Empty)
                {
                    // Yes, so skip it
                    continue;
                }
                // Here you process the non-empty line
                return line;
            } while (true);
        }
    }

ファイルを作成する(または追加する)ために使用しているものです

現在は DateTime オブジェクトです

あなたの (Karl) コードを使用して、「readLastDate()」というメソッドを作成しました。

代わりに最初の日付を取得します。

4

5 に答える 5

2

私はおそらく実用的でシンプルな方法をとっていますが、すべてのストリームのものをスキップして、Fileこのようにクラスを直接使用しています...

string newLine = "";
if (!isFirstLine)
    newLine = Environment.NewLine;

File.AppendAllText(
    filePath, 
    string.Format("{0}{1}", newLine, DateTime.Now.ToString()));
于 2013-07-22T20:34:39.603 に答える
1

を使用してsw.Write、ラインフィードを PRE-pend することができます。残念ながら、ファイルの先頭に空の行が表示されます。

于 2013-07-22T18:54:26.953 に答える
1

File.AppendAllText別の回答で指摘されているように、レコードの追加は を呼び出すだけの簡単な問題です。私はお勧めしますが:

File.AppendAllText(filePath, DateTime.Now.ToString() + Environment.NewLine);

ファイルから最後の日付を読み取るのも非常に簡単です。

string lastGoodLine = "01/01/1900";
using (StringReader sr = new StringReader(filePath))
{
    while (!sr.EndOfStream)
    {
        string line = sr.ReadLine();
        if (!string.IsNullOrEmpty(line))
            lastGoodLine = line;
    }
}
return lastGoodLine;
于 2013-07-22T20:44:06.100 に答える
1

コマンド .Trimend ('\n') を使用してみましたか?

http://msdn.microsoft.com/en-us/library/system.string.trimend.aspx

于 2013-07-22T18:43:40.257 に答える