C# эквивалент fprintf
Я конвертировал некоторый код из 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 ответа
Как насчет:
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();
}
Вы можете создать StreamWriter, чтобы обернуть FileStream
, а затем использовать Write
чтобы получить что-то вроде
StreamWriter writer = new StreamWriter(fs);
writer.Write("Wheel1: {0} \t Wheel2: {1} \t Dist: {2}", Wheel0, Wheel1, TotalDist);
Похоже, вы ищете String.Format
,
Write()
а также WriteLine()
методы на самом деле делают то же самое.