2012-03-02 3 views
3

Я конвертировал некоторый код из C++ в C#. Недостаточное понимание C# API не позволяет мне найти эквивалент fprintf. То, что я в основном пытаюсь сделать, это написать вспомогательный класс для записи информации в файл. До сих пор я определил следующий класс. Если кто-то увидит что-то необычное, пожалуйста, дайте мне знать. Метод «Журнал» регистрирует только строки в настоящее время. Я не знаю, лучший ли это для этого. Во всяком случае, я хотел бы преобразовать некоторые числа, чтобы свалить в файл журнала. В 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

+0

нормально, я думаю, у меня есть неплохая идея .. спасибо кучу – nixgadgets

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);