2012-03-02 106 views
3

我一直在將一些代碼從C++轉換爲C#。我對C#API的理解不夠讓我找不到fprintf的等價物。我基本上試圖做的是寫一個幫助類來記錄信息到一個文件。到目前爲止,我已經定義了以下類。如果有人看到不尋常的東西,請告訴我。 「Log」方法目前只記錄字符串。我不知道這是否是這樣做的最好方法。無論如何,我想轉換一些數字轉儲到日誌文件。在C++中,我有fprintf進行轉換。我怎樣才能在C#中實現類似的東西?C#相當於fprintf

fprintf(file, "Wheel1: %f \t Wheel2: %f \t Dist: %f, Wheel0, Wheel1, TotalDist); 

public class Logger 
{ 
    private string strPathName = string.Empty; 
    private StreamWriter sw = null; 

    /// <summary> 
    /// Constructor 
    /// </summary> 
    /// <param name="prefix"></param> 
    public Logger(string prefix) 
    { 
     DateTime datet = DateTime.Now; 

     // Format string 
     if (string.IsNullOrEmpty(prefix)) 
     { 
      prefix += "_"; 
     } 
     else 
     { 
      prefix = ""; 
     } 

     strPathName = "Log_" + prefix + datet.ToString("MM_dd_hhmmss") + ".log"; 
     if (File.Exists(strPathName) == true) 
     { 
      FileStream fs = new FileStream(strPathName, FileMode.OpenOrCreate, FileAccess.ReadWrite); 
      fs.Close(); 
     } 
    } 

    /// <summary> 
    /// Create a directory if not exists 
    /// </summary> 
    /// <param name="strLogPath"></param> 
    /// <returns></returns> 
    private bool CheckDirectory(string strLogPath) 
    { 
     try 
     { 
      int nFindSlashPos = strLogPath.Trim().LastIndexOf("\\"); 
      string strDirectoryname = strLogPath.Trim().Substring(0, nFindSlashPos); 

      if (Directory.Exists(strDirectoryname) == false) 
      { 
       //LogInfo("Creating log directory :" + strDirectoryname); 
       Directory.CreateDirectory(strDirectoryname); 
      } 
      return true; 
     } 
     catch (Exception) 
     { 
      return false; 
     } 
    } 

    public void Log(String message) 
    { 
     DateTime datet = DateTime.Now; 
     if (sw == null) 
     { 
      sw = new StreamWriter(strPathName, true); 
     } 
     sw.Write(message); 
     sw.Flush(); 
    } 

    /// <summary> 
    /// Close stream 
    /// </summary> 
    public void Close() 
    { 
     if (sw != null) 
     { 
      sw.Close(); 
      sw = null; 
     } 
    } 

} 

在此先感謝

回答

3

如何:

public void Log(String message, params object[] args) 
{ 
    DateTime datet = DateTime.Now; 
    if (sw == null) 
    { 
     sw = new StreamWriter(strPathName, true); 
    } 
    sw.Write(String.Format(message,args)); 
    sw.Flush(); 
} 
+0

將這項工作,如果它是一個正常的字符串沒有任何格式的?換句話說,沒有數字,只是一個普通的字符串。 – nixgadgets 2012-03-02 00:36:12

+0

好吧,我認爲我有一個相當好的主意..謝謝一堆 – nixgadgets 2012-03-02 00:54:21

3

這聽起來像你正在尋找String.Format

Write()WriteLine()方法實際上做同樣的事情。

4

您可以創建一個StreamWriter來包裝你FileStream,然後用Write要達到這樣的

StreamWriter writer = new StreamWriter(fs); 
writer.Write("Wheel1: {0} \t Wheel2: {1} \t Dist: {2}", Wheel0, Wheel1, TotalDist);