MFC/VC C++ 【xls文件/文本文件】读写与按条件删除
MFC/VC C++ 【xls文件】读写与删除一、必备知识:相关 类/API类CStdioFileCFileFindCFileCFileStatusCTimeCTimeSpan函数CTime::GetCurrentTimeCFile::OpenCFile::WriteCFileFind::FindFileCFileFind::FindNextFileCFileFind::IsDirectoryCF
·
MFC/VC C++ 【xls文件】读写与删除
一、必备知识:相关 类/API
类
CStdioFile
CFileFind
CFile
CFileStatus
CTime
CTimeSpan
函数
CTime::GetCurrentTime
CFile::Open
CFile::Write
CFileFind::FindFile
CFileFind::FindNextFile
CFileFind::IsDirectory
CFileFind::GetFilePath
WideCharToMultiByte
CreateFile
setlocale
remove
二、使用案例
void CWriteExcelDlg::OnBnClickedButton1()
{
// 测试1:CFile方法生成xls文件
CTime sysTime = CTime::GetCurrentTime();
CString strTime = sysTime.Format(_T("%Y%m%d%H%M%S"));
CString FileName = _T("d:/") + strTime + _T(".xls");
CFile file;
file.Open(FileName, CFile::modeCreate | CFile::modeReadWrite | CFile::modeNoTruncate);
CString text = _T("型号:\tMCB01-V1.1\r时间:\t2021年11月20号 11:12:30\r条码:""\t43234njreb332322\r\r序号\t压力\n01\t32.3\n02\t40.1\n");
// unicode转ansi
int size = WideCharToMultiByte(CP_ACP, 0, text, -1, nullptr, 0, nullptr, nullptr);
char*buf = new char[size];
int tSize = WideCharToMultiByte(CP_ACP, 0, text, -1, buf, size, nullptr, nullptr);
file.Write(buf, size);
delete[]buf;
int a = 0;
}
CString ExcelName;
void CWriteExcelDlg::OnBnClickedButton2()
{
// 测试2 CStdioFile方法生成xls文件
CString ProName = _T("BCM-07-01V");
CString strBarCode = _T("2893XF438200");
CString m_strWriteData;
CStdioFile File;
CTime sysTime = CTime::GetCurrentTime();
CString strTime = sysTime.Format(_T("%Y%m%d%H%M%S"));
ExcelName = _T("d:/") + strTime + _T(".xls");
strTime = sysTime.Format(_T("%Y年%m月%d日 %H:%M:%S"));
HANDLE hFile = CreateFile
( ExcelName
, FILE_ALL_ACCESS
, FILE_SHARE_READ
, NULL
, OPEN_EXISTING
, FILE_ATTRIBUTE_NORMAL
, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
HRESULT hr = GetLastError();
if (hr == ERROR_FILE_NOT_FOUND)
{
m_strWriteData.Format(_T("程序名:\t%s\r时间:\t%s\r条码:\t%s\r\r序号\t压力\r")
, ProName
, strTime
, strBarCode);
File.Open(ExcelName, CFile::modeCreate | CFile::modeReadWrite);
setlocale(LC_ALL, "chs");
File.WriteString(m_strWriteData);
setlocale(LC_ALL, "C");
m_strWriteData = _T("");
File.Close();
}
}
CloseHandle(hFile);
int a = 0;
}
CArray<double> Pizometerdata;
void CWriteExcelDlg::OnBnClickedButton3()
{
// 测试3 在测试2生成的文件中,填充随机数据
CStdioFile File;
CString m_strWriteData;
CString strData;
int m_idataNum = 100;
for (int i = 0; i < m_idataNum; i++)
{
if (Pizometerdata.GetAt(i) != 0)
{
strData.Format(_T("%d\t%f\r"), i, Pizometerdata.GetAt(i));
m_strWriteData += strData;
}
else
{
strData.Format(_T("%d\t\r"), i);
m_strWriteData += strData;
}
}
File.Open
( ExcelName
, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeReadWrite);
File.SeekToEnd();
File.WriteString(m_strWriteData);
File.Close();
}
void CWriteExcelDlg::OnBnClickedButton4()
{
// 测试4 生成一些随机数据
srand(time(nullptr));
for (int i = 0; i < 100; ++i)
{
Pizometerdata.Add((rand() % 100)*0.01 + (rand() % 30) + 60);
}
int a = 0;
}
#include <vector>
void CWriteExcelDlg::OnBnClickedButton5()
{
// 5 删除过期数据
std::vector<CString> vFilePathList;
CFileFind finder;
BOOL isNotEmpty = finder.FindFile(_T("d:\\*.*"));//总文件夹,开始遍历
CFileStatus fileStatus;
CTime today = CTime::GetCurrentTime();
CTimeSpan spanTime;
while (isNotEmpty)
{
isNotEmpty = finder.FindNextFile();//查找文件
CString filename = finder.GetFilePath();//获取文件的路径,可能是文件夹,可能是文件
if (!(finder.IsDirectory()))
{
CFile::GetStatus(filename, fileStatus);
spanTime = today - fileStatus.m_ctime;
// 如果文件创建时间超过一分钟,被认为是无效文件
if (spanTime.GetTotalMinutes() > 1)
{
// 如果是文件则加入文件列表
vFilePathList.push_back(filename);// 将一个文件路径加入容器
}
}
}
for (auto str:vFilePathList)
{
USES_CONVERSION;
remove(T2A(str));
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)