我使用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;
}
}
}
}
答案 0 :(得分: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();
}
}
答案 1 :(得分:0)
您正在反复打开和覆盖同一文件。使用FileStream(甚至更好的StreamWriter)类,保持流与串口一起打开,并在完成后关闭它。
此外,如果您通过串行端口传输文本,您可能需要考虑更容易使用的SerialPort.ReadLine()方法。