2012-09-20 8 views
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; 
     } 
    } 
} 

}

답변

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(); 
     } 
    } 
+0

고맙습니다 ... 매우 잘 작동합니다. – RAC

+0

@ user1687153 : 답을 수락하는 것이 감사하다고 말하는 것보다 낫습니다. – Cdeez

0

동일한 파일을 반복해서 열고 덮어 쓰는 중입니다. 대신 FileStream (또는 더 나은 StreamWriter) 클래스를 사용하고 스트림을 직렬 포트와 함께 열어두고 작업이 끝나면 닫습니다.

또한 직렬 포트를 통해 텍스트를 전송하는 경우 훨씬 더 사용하기 쉬운 SerialPort.ReadLine() 메서드를 고려할 수 있습니다.

+0

ReadLine을 사용하려고했지만 어떤 이유로 인해 코드가 작동하지 않습니다. 앞에서 언급했듯이, C#을 처음 접했을 때 나는 위의 코드로 동작하는 예제를 제공 할 수 있다면 정말 고맙겠습니다. 다시 한번 감사드립니다. – RAC

0

@ Alan의 대답을 확장하면 File.WriteAllText 대신 File.AppendAllText을 사용하면 파일을 반복해서 덮어 쓸 수 있습니다. 따라서 파일을 확인하기 전에 빈 텍스트를 받으면 빈 텍스트로 파일을 덮어 씁니다.