2009-07-16 3 views
1

SQL Server에서 SSIS 패키지에 대한 정보를 찾는 콘솔 응용 프로그램을 작성하고 있습니다. 나는 그것을 작동하고 .csv 파일에 쓰고있다. 방금 servername, foldername 및 outputfile에 대한 명령 줄 스위치를 전달하는 기능을 추가했습니다. 출력 파일을 지정하지 않으면 콘솔로 출력하고 싶습니다. 이미 수행하고 있습니다.콘솔 응용 프로그램의 선택적 출력 파일 - StreamWriter 전역 만들기

필자가 작성한 파일을 처리 한 방식이 어색하고 잘못된 것 같습니다.

내 주요 메서드에서 StreamWriter를 만듭니다. 이 파일에 프로그램의 전체 출력을 작성해야합니다. 재귀 적으로 함수를 호출하여 지정된 폴더 아래의 폴더를 탐색합니다.

모든 호출에서 StreamWriter 개체를 전달합니다.이 매개 변수는 함수를 사용하지 않는 함수의 매개 변수이므로 전달되는 매개 변수로 전달 될 수 있습니다. 그것은 그것을 글로벌 변수로 만들 수 있어야하는 것처럼 보이지만 C#에는 전역 변수가없고 "글로벌을 사용하는 경우 아마도 잘못되었다는 것을 알 수 있습니다".

잠시 동안이 작은 유틸리티에서 플러그를 꽂은 후에이 문제를 다시 살펴볼 계획 이었지만 이제는 모든 함수가 StreamWriter 개체를 원한다는 문제가 있습니다. 옵션으로 만들면 ' 기능을 위해 거기에 있지 마라. 그리고 그것은 또한 C#이 선택적 인수를 수행하지 않는 것처럼 보입니다.

나는 당신이 내가 필요로 할 때 나는 전문가가 아니며 단지 쓸쓸하다고 말할 수 있다고 확신한다. 도움을 주셔서 감사합니다.

답변

2

singleton 패턴을 사용하여 사용중인 StreamWriter를 참조하고 싶습니다. 싱글 톤은 전역 변수의 기능을 "시뮬레이션"하는 방법으로 문제가 발생하지 않습니다.

기본적으로 싱글 톤에서 제공하는 것은 응용 프로그램의 다양한 부분에서 공유하려는 리소스의 클래스 별 인스턴스입니다. 리소스는 정적 클래스 인스턴스를 통해 액세스됩니다.

효과적으로, 공개로 사용하는 클래스를 정적 회원으로 사용하려는 클래스를 정의하는 것이 좋습니다. 그런 식으로 나머지 코드에서 사용하는 메서드는 정적 인 관계로 클래스의 인스턴스를 만들지 않고도 포함 된 클래스에서 해당 메서드에 액세스하여 StreamWriter의 동일한 인스턴스에 액세스 할 수 있습니다. 어떤 변화가 가능하다

public static class CsvWriter 
{ 
    private static StreamWriter _writer = new StreamWriter(...); 

    public static StreamWriter Writer 
    { 
     get { return _writer; } 
    } 
} 

같은

1

뭔가, 주요 항목은 여기 정적 속성입니다. 그것은 전 세계와 같지만 (전적으로) 나쁜 것은 아닙니다.

+0

안녕 헹크. 새로운 StreamWriter() 지점에서이 오류가 발생합니다. 메서드에 대한 오버로드가 없습니다. 'StreamWriter'는 '0'인수를 사용합니다. 나는 http://msdn.microsoft.com/en-us/library/ms998558.aspx에서 다음 템플릿을 시도했고 같은 결과를 얻었다. – Sam

+0

그래, 거기에 점들을 넣었어야했다 ... 파일 이름이나 스트림을 사용하여 StreamWriter를 생성한다. 아마도 이미 뭔가가있을 것입니다. –

+0

아마도 분명히 나와 함께 도와 주셔서 감사합니다 :) – Sam

0

동일한 클래스의 모든 기능입니까? 클래스 변수 (필드)를 만들고 클래스의 모든 메소드에서 액세스 할 수 있습니다. 그렇지 않은 경우 정적 필드를 사용하여 항상 새 공용 클래스를 만들 수 있습니다. 이에 대한 Console.SetOut을 사용할 수 있습니다

0

I :

static void Main(string[] args) 
{ 
    StreamWriter writer = new StreamWriter(@"c:\path\file.ext"); 
    try 
    { 
     Console.SetOut(writer); 
     Console.WriteLine("One"); 
     Console.WriteLine("Two"); 
     Console.WriteLine("Three"); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("That went wrong."); 
    } 
    finally 
    { 
     writer.Dispose(); 
    }  
} 
+0

멋지 네요.하지만 콘솔 출력물은 읽을 수 있도록 포맷되어 있고 파일 출력은 csv입니다. – Sam

관련 문제