2012-11-02 1 views
0
using System; 
using System.Diagnostics; 
using System.Collections; 
using System.Management; 
using System.IO; 

FileStream ostrm; 
    StreamWriter writer; 
    TextWriter oldOut = Console.Out; 
    try 
    { 
     ostrm = new FileStream ("./Output.txt", FileMode.OpenOrCreate, FileAccess.Write); 
     writer = new StreamWriter (ostrm); 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine("Cannot open Output for writing"); 
     Console.WriteLine(e.Message); 
     return; 
    } 
    foreach (ManagementObject envVar in searcher.Get()) 
    { 
     Console.WriteLine("Username: {0}", envVar["Name"]); 
    } 
    Console.SetOut (writer); 
    foreach (ManagementObject envVar in searcher.Get()) 
    { 
     Console.WriteLine("Username: {0}", envVar["Name"]); 
    } 
    Console.SetOut (oldOut); 
    writer.Close(); 
    ostrm.Close(); 
Console.WriteLine("" + 
Environment.NewLine + "Press any key to exit"); 
Console.ReadLine(); 

콘솔 응용 프로그램에이 코드가 있고 모든 사용자가 네트워크에 쓰는 것을 완료하는 데 AGES가 걸리고 모든 단계에서 인터럽트되면 Output .txt가 비어있게됩니다. 주기적으로 저장하도록 할 수있는 방법이 있습니까? 그렇다면 텍스트 파일에 사용자 이름이 있습니까?C# Console.Out()이 인터럽트되면 쓰지 않습니다.

도움을 주시면 대단히 감사하겠습니다.

답변

2

Console.Out.Flush();을 사용해 보셨습니까?

+0

편집하고 컴파일했지만 월요일까지는 테스트 할 수 없습니다. 어쨌든 도움을 주셔서 감사합니다. D 원하는 방식으로 작동하는지 알려 드리겠습니다. :) –

0

프로그램이 동일한 작업을 두 번 수행하는 것처럼 보입니다. 또한, 대신 Console.Out 리디렉션의과 같이 File.AppendAllText를 사용해보십시오 :

foreach (ManagementObject envVar in searcher.Get()) { 
    string str = string.Format("Username: {0}\r\n", envVar["Name"]); 
    File.AppendAllText("./Output.txt", str); 
} 

AppendAllText 개폐 파일 각각의 쓰기에, 그래서 느리지 만 훨씬 더 신뢰할 수있을 것입니다.