C++builder 写入txt不被覆盖并实现换行,该如何解决
C++builder 写入txt不被覆盖并实现换行
如何实现:C++builder 写入txt不被覆盖并实现换行,现在的程序每次写入都会覆盖以前内容,加上换行符也不行。
------解决方案--------------------
打开文件后,把文件指针移到最后,写文件时如果需换行,加写"\r\n".
------解决方案--------------------
这和 打开文件的 模式 有关
如果 打开 的方法 为 truncate
那肯定是覆盖
应该为 append
------解决方案--------------------
给个简单的例子:使用TStringList
TStringList *slt=new TStringList ;
slt->LoadFromFile("c:\\aa.txt");
slt->Add("你的内容");//加入你的内容
。。。
slt->SaveToFile("c:\\aa.txt");
------解决方案--------------------
+1
如何实现:C++builder 写入txt不被覆盖并实现换行,现在的程序每次写入都会覆盖以前内容,加上换行符也不行。
------解决方案--------------------
打开文件后,把文件指针移到最后,写文件时如果需换行,加写"\r\n".
void __fastcall TForm1::logFile(char* p)
{
char logName[1024];
SYSTEMTIME et;
HANDLE hLog;
GetLocalTime(&et);
lstrcpy(logName,"d:\\123log.txt");
hLog=CreateFile(logName,GENERIC_WRITE,FILE_SHARE_READ,NULL,OPEN_ALWAYS ,FILE_ATTRIBUTE_NORMAL ,NULL);
if (hLog==INVALID_HANDLE_VALUE)
return;
if(SetFilePointer(hLog,0,0,FILE_END)>1024*1024*5-1)
{
CloseHandle(hLog);
char* log2Name=new char[MAX_PATH];
lstrcpy(log2Name,"z:\\123log1.txt");
log2Name[0]=logName[0];
CopyFile(logName,log2Name,false);
delete[] log2Name;
hLog=CreateFile(logName,GENERIC_WRITE,FILE_SHARE_READ,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL ,NULL);
}
if(p[0]=='\r' && p[1]=='\n')
wsprintf(logName,"\r\n%04d-%02d-%02d %02d:%02d:%02d.%03d %s\r\n",et.wYear,et.wMonth,et.wDay,et.wHour,et.wMinute,et.wSecond,et.wMilliseconds,p+2);
else
wsprintf(logName,"%04d-%02d-%02d %02d:%02d:%02d.%03d %s\r\n",et.wYear,et.wMonth,et.wDay,et.wHour,et.wMinute,et.wSecond,et.wMilliseconds,p);
unsigned long retWriteByte;
WriteFile(hLog,logName,lstrlen(logName),&retWriteByte,NULL);
CloseHandle(hLog);
}
//---------------------------------------------------------------------------
------解决方案--------------------
这和 打开文件的 模式 有关
如果 打开 的方法 为 truncate
那肯定是覆盖
应该为 append
------解决方案--------------------
给个简单的例子:使用TStringList
TStringList *slt=new TStringList ;
slt->LoadFromFile("c:\\aa.txt");
slt->Add("你的内容");//加入你的内容
。。。
slt->SaveToFile("c:\\aa.txt");
------解决方案--------------------
+1