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

您一次又一次地打开和覆盖同一个文件。改用 FileStream(甚至更好,StreamWriter)类,保持流与串行端口一起打开,并在完成后关闭它。

此外,如果您通过串行端口传输文本,您可能需要考虑更易于使用的 SerialPort.ReadLine() 方法。

于 2012-09-20T20:41:15.640 回答
0

扩展@Alan 的答案,您可以使用File.AppendAllText而不是File.WriteAllText一次又一次地覆盖文件。因此,如果您在检查文件之前收到空文本,则该文件将被空文本覆盖。

于 2012-09-20T21:24:15.270 回答