2

COMポート(シリアル)を使用してデータを送受信しています。私は次のコードを書きました。C#ちょっと新しいので、これは実際に私の最初のプロジェクトです。受信したデータをデスクトップのテキストファイルに書き込もうとしています。プログラムは実際にファイルを作成しますが、何も書き込みません。同様に、受信したデータをコンソールで確認できますが、テキストファイルに書き込まれていません。私が間違っていることについてのどんな助けも大いに感謝されるでしょう。

ありがとうございました。コードは以下のとおりです。

class Program
{
    SerialPort p = new SerialPort("COM7", 300, Parity.None, 8, StopBits.One);
    string sbuffer = string.Empty;
    byte i = 0;
    static void Main(string[] args)
    {
        new Program();
    }

    Program()
    {
        string[] names = SerialPort.GetPortNames();
        Console.WriteLine("Serial ports:");
        foreach (string name in names)
        {
            Console.WriteLine(name);
        }
        Console.WriteLine("Using COM7");

        p.Open();


        string data_ = "$1RB\r";
        Console.WriteLine("Writing data: {0}",data_);
        p.Write(data_);
        p.DataReceived += new SerialDataReceivedEventHandler(p_DataReceived);
        Console.ReadKey();
        p.Close();
    }


    void p_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        Thread.Sleep(5);
        sbuffer += (sender as SerialPort).ReadExisting();
        i++;
        if (i > 9)
        {
            Console.WriteLine(sbuffer);
          System.IO.File.WriteAllText(@"C:\Users\myname\Desktop\WriteText.txt", sbuffer);
            sbuffer = string.Empty;
        }
    }
}

}

4

3 に答える 3

1

イベントを使用することも、このメソッドを使用してデータ文字列を渡すこともできます。存在する限りファイルに追加するか、存在しない場合は新しいファイルを作成します。書き込まれるデータは、コンソール画面に表示されている出力と同じである必要があります。

    static void WriteOutputToTextFile(string _data)
    {
        string FolderName = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);   //set destination as your desktop
        using (StreamWriter SW = new StreamWriter(FolderName + "\\test.txt", true))   //true makes it append to the file instead of overwrite
        {
            SW.WriteLine(_data);
            SW.Close();
        }
    }
于 2012-09-20T20:40:59.633 に答える
0

@Alanの答えを拡張すると、ファイルを何度も上書きするFile.AppendAllText代わりに使用できます。File.WriteAllTextしたがって、ファイルをチェックする前に空のテキストを受け取った場合、ファイルは空のテキストで上書きされます。

于 2012-09-20T21:24:15.270 に答える
0

同じファイルを何度も開いて上書きしています。代わりにFileStream(またはさらに良いのはStreamWriter)クラスを使用し、シリアルポートと一緒にストリームを開いたままにして、完了したら閉じます。

また、シリアルポートを介してテキストを送信する場合は、はるかに使いやすいSerialPort.ReadLine()メソッドを検討することをお勧めします。

于 2012-09-20T20:41:15.640 に答える