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));
	}
}
Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐