为什么我得到“;创建文件失败:161”;当我试图打开串行端口时

本文关键字:串行端口 创建 文件 为什么 失败 | 更新日期: 2023-09-27 17:58:19

我在serialPort.Open()行上得到"CreateFile Failed:161":

. . .
      MessageBox.Show(string.Format("Made it into PrintUtils.PrintBarcode()"));
using (SerialPort serialPort = new SerialPort())
{
    MessageBox.Show("Made it into using statement in PrintUtils.PrintBarcode()"); 
    serialPort.BaudRate = 19200;
    serialPort.Handshake = Handshake.XOnXOff;
    serialPort.DataBits = 8;
    serialPort.Parity = Parity.None;
    serialPort.StopBits = StopBits.One;
    serialPort.PortName = "COM1"; // Is this what it wants?
    MessageBox.Show("Made it beyond the protocol assignments in PrintUtils.PrintBarcode()"); 
    serialPort.Open(); // <-- This causes "CreateFile Failed: 161"
    MessageBox.Show("Opened the serial port in PrintUtils.PrintBarcode()"); 
    Thread.Sleep(2500); // I don't know why this is needed, or if it really is...
    // Try this first:
    serialPort.WriteLine("! 0 200 200 210 1");
    MessageBox.Show("Sent the first line in PrintUtils.PrintBarcode()"); 
    serialPort.WriteLine("TEXT 4 0 30 40 Bonjour la Monde"); //Hola el Mundo --- Hallo die Welt
    MessageBox.Show("Sent the TEXT line in PrintUtils.PrintBarcode()"); 
    serialPort.WriteLine("FORM");
    MessageBox.Show("Sent the FORM line in PrintUtils.PrintBarcode()"); 
    serialPort.WriteLine("PRINT");
    MessageBox.Show("Sent the PRINT line in PrintUtils.PrintBarcode()"); 
    // or (if WriteLine does not include a carriage return and line feed):
    //              serialPort.Write("! 0 200 200 210 1'r'n");
    //              serialPort.Write("TEXT 4 0 30 40 Bonjour la Monde'r'n"); //Hola el Mundo --- Hallo die Welt
    //              serialPort.Write("FORM'r'n");
    //              serialPort.Write("PRINT'r'n");
    serialPort.Close();
    MessageBox.Show("Closed the port in PrintUtils.PrintBarcode()"); 
}

我知道这一点,因为我看到的最后一条"调试消息"是"超出了PrintUtils.PrintBarcode()中的协议分配"

是因为其中一个协议错误还是格式不正确?或者我遗漏了所需的协议分配?

为什么我得到“;创建文件失败:161”;当我试图打开串行端口时

错误161表示The specified path is invalid.,您得到它是因为您的端口名无效。

Windows CE要求端口名(实际上是所有驱动程序名)以":"字符作为后缀,因此您的代码应该是:

serialPort.PortName = "COM1:";