如何使用winapi在文本文件中转储整个结构
How to dump an entire structure in a textfile using winapi
是否可以使用CreateFile/Writefile(WINAPI)将整个结构转储到文件中
我不想使用fstream对象。所以请不要向他们建议答案。提前感谢
Struct abc
{
int a;
int b;
char c;
}
我想使用WriteFile/CreateFile API来完成。目前我正在这样做
struct abc
{
int a;
int b;
int c;
};
void main()
{
struct abc ob;
ob.a=1;
ob.b=2;
ob.c=3;
DWORD dwNumBytesWritten = 0;
HANDLE hFile;
hFile = CreateFile(FILENAME,
FILE_APPEND_DATA,
FILE_SHARE_WRITE,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL);
WriteFile(hFile,
(LPCVOID)&ob,
sizeof(abc),
(LPDWORD)&dwNumBytesWritten,
NULL);
}
但是输出是一些未知的符号。
如果您想让任意对象可读,就不能直接转储它。
我建议实现一种方法,将对象的内容格式化为字符串。然后,您可以使用任意数量的机制对其进行日志记录。
class CLoggable
{
public:
virtual std::string GetContents() = 0;
};
struct abc : public CLoggable
{
int a;
std::string c;
CSomeObject* pObj;
virtual std::string GetContents()
{
std::string strBuffer;
strBuffer += "a = ";
strBuffer += std::to_string( static_cast< long long >( a ) );
strBuffer += "c = ";
strBuffer += c;
strBuffer += "pObj = ";
strBuffer += pObj == nullptr ? "Null object" : pObj->GetContents();
// etc etc etc
return strBuffer;
}
};
// e.g.
abc obj;
logger.log( obj.GetContents() );
或者,实现流插入运算符,并将其直接传递给stdout或文件流。
basic_ostream& operator<< ( abc& val ); // etc
abc obj;
std::cout << "Object contains : " << obj;
相关文章:
- 分段故障(堆芯转储)矢量
- Cppcheck生成xml转储文件
- 如何找出GDB的SIGTRAP核心转储的根本原因
- C++映射分割错误(核心转储)
- 在c++中初始化矩阵时出现分段错误(核心转储)
- 在c++中键入向量中的所有值后,得到分段错误(核心转储)
- 浮点异常(核心转储)#694457
- 分段错误(核心转储)但无法弄清楚
- 链接到libkcapi时没有核心转储
- 检测到堆栈粉碎:已终止 中止(核心已转储)
- Visual C 结构抛出内存转储
- C++分段错误(核心转储)和使用结构
- 我应该使用(未记录的?)MINIDUMP_EXCEPTION_INFORMATION64结构来创建64位进程的转储吗
- cout <<棘手的运算符重载 - 转储结构的字节数
- 如何将gcc警告转储为结构化格式
- 分段错误(核心转储) - 通过对象访问结构的成员时
- 将树数据结构转储到文件/从文件还原树数据结构
- C++数据结构(标准库)转储(如 Python 打印函数)
- 具有复杂层次结构的decorator模式:导致核心转储的构造函数
- gcc转储类层次结构问题