C # эквивалент fprintf - PullRequest
       26

C # эквивалент fprintf

4 голосов
/ 02 марта 2012

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

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 ]

5 голосов
/ 02 марта 2012

Вы можете создать StreamWriter , чтобы обернуть FileStream, а затем использовать Write, чтобы получить что-то вроде

StreamWriter writer = new StreamWriter(fs);
writer.Write("Wheel1: {0} \t Wheel2: {1} \t Dist: {2}", Wheel0, Wheel1, TotalDist);
3 голосов
/ 02 марта 2012

Как насчет:

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();
}
3 голосов
/ 02 марта 2012

Звучит так, будто вы ищете String.Format.

Методы Write() и WriteLine() фактически делают одно и то же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...