2009-07-16 42 views
1

我正在編寫一個控制檯應用程序,它正在查找有關SQL Server中的SSIS包的信息。我有它的工作和寫入.csv文件。我剛剛添加了爲servername,foldername和outputfile傳遞命令行開關的功能。如果沒有指定輸出文件,我只想輸出到控制檯,我已經在做這些。控制檯應用程序中的可選輸出文件 - 使StreamWriter全局化

我處理文件寫入的方式似乎很尷尬,可能是錯誤的。

在我的主要方法中,我創建了一個StreamWriter。我需要將程序的整個輸出寫入此文件。我通過遞歸調用函數來探索指定文件夾下的文件夾。

我在所有調用中都傳遞了StreamWriter對象 - 它是不使用它的函數中的一個參數,因此它可以傳遞給所有調用的參數。看起來我應該可以把它變成一個全局變量,但是我看到c#沒有全局變量,「如果你使用全局變量,你可能做錯了」。

我打算在插入這個小實用程序一段時間後重新訪問這個問題,但現在我遇到了所有函數都需要StreamWriter對象的問題 - 如果我將它設置爲可選項,那麼它就會贏得'在那裏的功能。它也似乎c#不做可選參數。

我敢肯定,你可以告訴我不是c#專家,只在我需要的時候纔會涉足。感謝你的協助。

回答

2

您想使用singleton模式來引用您正在使用的StreamWriter。單例是一種「模擬」全局變量功能的方法,而不會產生問題。

實質上,單例提供的是您希望在應用程序中的許多不同部分之間共享的資源的類特定實例。資源通過一個靜態類實例進行訪問。

實際上,您要做的是定義一個類,該類具有您想要使用的StreamWriter的公共成員靜態;通過這種方式,您在代碼的其餘部分中使用的任何方法都可以通過從包含類訪問StreamWriter的SAME實例(無需創建類的實例,因爲它是靜態的)而訪問它。

1

喜歡的東西

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

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

有些變化是可能的,其主要產品在這裏的靜態屬性。這就像一個全球性的,但不是(完全)一樣糟糕。

+0

亨克嗨。我在新的StreamWriter()上得到了這個錯誤。 方法'StreamWriter'沒有重載需要'0'參數。我試過從http://msdn.microsoft.com/en-us/library/ms998558.aspx下面的模板,並得到相同的結果。 – Sam 2009-07-16 20:42:34

+0

是的,我應該在那裏放點...使用文件名或流來構造StreamWriter。你可能已經有東西了。 – 2009-07-16 21:06:11

0

同一類的所有功能是?您可以創建一個類變量(一個字段)並從該類的所有方法訪問它。如果不是的話,你總是可以用一個靜態字段創建一個新的公共類。

0

我可以使用Console.SetOut此:

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(); 
    }  
} 
相關問題