- 浏览: 46409 次
- 性别:
- 来自: 北京
最新评论
2009-08-07
VC中文件读写
今天花了几个小时写了一个文件的封装类CFileUtils,能够实现多级目录的创建,.ini文件的读写以及其它文件的读写,赶紧把代码贴出来备忘一下
头文件FileUtils.h
// FileUtils.h: interface for the CFileUtils class. // ////////////////////////////////////////////////////////////////////// #if !defined(AFX_FILEUTILS_H__91C8D3E0_39CD_449F_878B_BC7DEBF8D74B__INCLUDED_) #define AFX_FILEUTILS_H__91C8D3E0_39CD_449F_878B_BC7DEBF8D74B__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 const CString CONFIGFILEDIR = "config"; const CString DATAFILEDIR = "data"; const CString CONFIGFILETYPE = ".ini"; const CString DATAFILETYPE = ".dat"; const CString CONFIGFILENAME = "System"; const CString CONFIG_SECTION_SYSBASE = "SysBase"; const CString CONFIG_SECTION_MERGER = "Merger"; class CFileUtils { public: CFileUtils(); virtual ~CFileUtils(); //common //字符串分割 void Split(CString str, CStringList & strList, const CString & divideCode, const CString & notIncCode); // 判断目录是否存在 BOOL FolderExists(LPCSTR lpPathName); //创建目录 BOOL CreateDir(LPCSTR lpPathName); //config BOOL WriteConfigfileInt(LPCSTR lpAppName, LPCSTR lpKeyName, INT lpInt, LPCSTR lpFileName); UINT GetConfigfileInt(LPCSTR lpAppName, LPCSTR lpKeyName, INT nDefault, LPCSTR lpFileName); BOOL WriteConfigfileString(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpString, LPCSTR lpFileName); DWORD GetConfigfileString(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpDefault, LPSTR lpReturnedString, DWORD nSize, LPCSTR lpFileName); //data BOOL WriteDatafile(LPCSTR lpFileName); BOOL ReadDatafile(LPCSTR lpFileName); BOOL WriteDatafileData(LPVOID lpData, UINT dataSize); BOOL ReadDatafileData(LPVOID lpData,UINT dataSize); void CloseDatafile(); private: //common CString m_currentDirectory; //config //data CFile * m_DATA_file; CArchive * m_DATA_archive; }; #endif // !defined(AFX_FILEUTILS_H__91C8D3E0_39CD_449F_878B_BC7DEBF8D74B__INCLUDED_)
FileUtils.cpp
// FileUtils.cpp: implementation of the CFileUtils class. // ////////////////////////////////////////////////////////////////////// #include "stdafx.h" #include "FileUtils.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CFileUtils::CFileUtils() { char strBuff[256]; m_currentDirectory = GetCurrentDirectory(256,strBuff); //获取当前路径 m_currentDirectory.Format("%s",strBuff); m_DATA_archive = NULL; m_DATA_file = NULL; } CFileUtils::~CFileUtils() { CloseDatafile(); } BOOL CFileUtils::WriteConfigfileInt( LPCSTR lpAppName, LPCSTR lpKeyName, INT lpInt, LPCSTR lpFileName ) { CreateDir(lpFileName); CString lpString; lpString.Format("%d",lpInt); CString sFileName = m_currentDirectory + lpFileName; return ::WritePrivateProfileString(lpAppName,lpKeyName,lpString,sFileName); //写入ini文件中相应字段 } UINT CFileUtils::GetConfigfileInt( LPCSTR lpAppName, LPCSTR lpKeyName, INT nDefault, LPCSTR lpFileName ) { CString sFileName = m_currentDirectory + lpFileName; return ::GetPrivateProfileInt(lpAppName,lpKeyName,nDefault,sFileName); } BOOL CFileUtils::WriteConfigfileString( LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpString, LPCSTR lpFileName ) { CString sFileName = m_currentDirectory + lpFileName; return ::WritePrivateProfileString(lpAppName,lpKeyName,lpString,sFileName); } DWORD CFileUtils::GetConfigfileString(LPCSTR lpAppName, LPCSTR lpKeyName, LPCSTR lpDefault, LPSTR lpReturnedString, DWORD nSize, LPCSTR lpFileName) { CString sFileName = m_currentDirectory + lpFileName; return ::GetPrivateProfileString(lpAppName,lpKeyName,lpDefault,lpReturnedString,nSize,sFileName); } BOOL CFileUtils::WriteDatafile( LPCSTR lpFileName ) { CreateDir(lpFileName); CString sFileName = m_currentDirectory + lpFileName; m_DATA_file = new CFile(sFileName,CFile::modeCreate | CFile::modeWrite); m_DATA_archive = new CArchive(m_DATA_file,CArchive::store); return TRUE; } BOOL CFileUtils::ReadDatafile( LPCSTR lpFileName ) { CString sFileName = m_currentDirectory + lpFileName; m_DATA_file = new CFile(sFileName,CFile::modeRead); m_DATA_archive = new CArchive(m_DATA_file,CArchive::load); return TRUE; } BOOL CFileUtils::WriteDatafileData( LPVOID lpData, UINT dataSize) { m_DATA_archive->Write(lpData,dataSize); m_DATA_archive->Flush(); return TRUE; } BOOL CFileUtils::ReadDatafileData( LPVOID lpData, UINT dataSize ) { m_DATA_archive->Read(lpData,dataSize); return TRUE; } void CFileUtils::CloseDatafile() { if(m_DATA_archive) { m_DATA_archive->Flush(); m_DATA_archive->Close(); m_DATA_file->Close(); delete m_DATA_archive; delete m_DATA_file; m_DATA_archive = NULL; m_DATA_file = NULL; } } BOOL CFileUtils::CreateDir( LPCSTR lpPathName ) { CStringList sDirNameList; CString sSeparator = "\\"; CString notIncCode = "."; CString sDirName; CString sPathName; BOOL bNeedJudge = TRUE; Split(lpPathName,sDirNameList,sSeparator,notIncCode); if (!sDirNameList.IsEmpty()) { sPathName = m_currentDirectory; POSITION pos = sDirNameList.GetHeadPosition(); while(pos != NULL) { sDirName = sDirNameList.GetNext(pos); sPathName += sSeparator + sDirName; if (bNeedJudge) { if (FolderExists(sPathName)) { continue; } bNeedJudge = FALSE; } CreateDirectory(sPathName,NULL); } return TRUE; } return FALSE; } BOOL CFileUtils::FolderExists( LPCSTR lpPathName ) { DWORD attr; attr = GetFileAttributes(lpPathName); return (attr != (DWORD)(-1) ) && (attr & FILE_ATTRIBUTE_DIRECTORY); } void CFileUtils::Split(CString str, CStringList & strList, const CString & divideCode, const CString & notIncCode) { CString strValue; strList.RemoveAll(); while (true) { strValue = str.SpanExcluding(divideCode); if ((strValue != "") && (strValue.Find(notIncCode) == -1)) { strList.AddTail(strValue); } str = str.Right(str.GetLength() - strValue.GetLength() - 1); if (str.IsEmpty()) break; } }
调用示例:
CFileUtils * pFileUtils = new CFileUtils; CString str; int iInt; CString sFileName; char strBuff[256]; sFileName = "\\" + CONFIGFILEDIR + "\\" + CONFIGFILENAME + CONFIGFILETYPE; pFileUtils->WriteConfigfileString("Section","Item1","testString",sFileName); pFileUtils->WriteConfigfileInt("Section","Item2",1,sFileName); pFileUtils->GetConfigfileString("Section","Item1",NULL,strBuff,100,sFileName); MessageBox(strBuff);//显示读取数据 iInt = pFileUtils->GetConfigfileInt("Section","Item2",0,sFileName); str.Format("%d",iInt); MessageBox(str);//显示读取数据 int i=333; float f=1.3333f; char ch='v'; int i1; float f1; char ch1; sFileName = "\\" + DATAFILEDIR + "\\" + "test" + DATAFILETYPE; pFileUtils->WriteDatafile(sFileName); pFileUtils->WriteDatafileData(&i,sizeof(int)); pFileUtils->WriteDatafileData(&f,sizeof(float)); pFileUtils->WriteDatafileData(&ch,sizeof(char)); pFileUtils->CloseDatafile(); // 读写完毕后需要关闭 pFileUtils->ReadDatafile(sFileName); pFileUtils->ReadDatafileData(&i1,sizeof(int)); pFileUtils->ReadDatafileData(&f1,sizeof(float)); pFileUtils->ReadDatafileData(&ch1,sizeof(char)); pFileUtils->CloseDatafile(); str.Format("%d,%f,%c",i1,f1,ch1);//格式化输出数据 MessageBox(str);//显示读取数据 delete pFileUtils;
注:
CArchive与CFile是绑定的,如果CFile对象释放,相应的CArchive对象也会释放掉,需要重新申请绑定
发表评论
-
VC下使用Macro (vbs)来实现标准注释的自动添加
2010-11-15 10:40 1963在VC6.0中,Tools->Macro可以直接录制宏, ... -
TCP/UDP包大小
2010-10-29 14:22 1791UDP一次发送数据包的大小,TCP一次发送数据包的大小。MTU ... -
Excel文件操作类
2010-09-06 10:50 1126Excel文件操作封装类 可实现以下功能: 1、打开已有E ... -
Visual C++ 6.0 操作excel2003进行图表绘制
2010-08-13 13:38 5269在实现对excel2003进行读写的基础之上,可以实现exce ... -
【转】Visual C++ 6.0 实现对excel2003的读写
2010-08-13 09:35 48391. 导入excel.h,excel.cpp文件 具 ... -
【转】文本文件与二进制文件
2010-08-04 10:43 1729网上关于文本 ... -
【转】VC++6.0共享内存
2010-08-04 09:25 2158VC++6.0共享内存技术总结 程序1 -- 建立共享区,写 ... -
【转】VC++中进程间相互通信的十一种方法
2010-08-04 09:05 1723进程通常被定 ... -
【转】多线程技术在VC++串口通信程序中的应用研究
2010-08-04 09:00 33721. 概述 在现代的各种实时监控系统和通信系统 ... -
【转】虚拟机(VMware)ubuntu9.04下挂载windows硬盘
2010-08-04 08:35 2177以挂载 F 盘 为例: 1. 关闭ubuntu。 ... -
技术备忘录之十一
2009-09-02 17:23 9372009-09-02 CONE 36 Panic的 ... -
技术备忘录之十
2009-09-02 17:13 9572009-09-01 symbian中的Log文件 ... -
技术备忘录之九
2009-09-02 17:08 11692009-08-26 symbian SDK第一次 ... -
技术备忘录之八
2009-08-09 20:18 8802009-08-09 VC中全局变量的定义- ... -
技术备忘录之六
2009-08-06 23:02 7962009-08-06 carbide中导入M ... -
技术备忘录之五
2009-08-05 22:24 8392009-08-05 symbian使用的设计模式:采用 ... -
技术备忘录之四
2009-08-03 18:48 10182009-08-03 Symbian开发之Carbide ... -
技术备忘录之三
2009-07-30 15:04 7962009-07-29 eclipse的联想功能-- ... -
技术备忘录之二
2009-07-28 23:07 10282009-07-28 structs2标签< ... -
技术备忘录之一
2009-07-28 09:23 9712009-07-27 eclipse及插件安装和配 ...
相关推荐
【标题】:“技术备忘录之十一”主要探讨的是与音频处理相关的技术,可能是关于一个音频引擎的实现或优化。这个备忘录可能涉及到如何在软件中管理和操作音频数据,以及如何利用特定工具来提高音频处理的效率和质量。...
《Android 备忘录应用开发详解》 ...通过以上知识点的学习和实践,开发者可以掌握创建一个功能完备的Android备忘录应用的核心技术。从源码中学习,不仅能够提升编程技能,也能加深对Android系统架构的理解。
7. **通知(Notifications)**: 当用户添加新的备忘录或者有重要的提醒时,应用会通过Notification API发送系统通知,确保用户即使不在应用内也能收到信息。 8. **Adapter与ListView/RecyclerView**: 为了显示列表...
7. **事件处理**:如果这个备忘录应用有添加、删除或修改功能,那么可能使用JavaScript进行交互处理。例如,监听`click`事件在按钮被点击时执行特定功能,使用`addEventListener`来添加事件监听器。 8. **存储和...
在提供的“备忘录课程设计.doc”文档中,可能会详细阐述以上各个知识点的具体实现,包括设计思路、技术选型、代码示例等内容,为学习者提供了一个完整的备忘录系统设计案例。通过深入阅读和理解这份文档,可以加深对...
这个"android作业 备忘录"项目可能是为学生或初学者设计的一个实践练习,以便他们更好地理解和掌握Android应用程序开发的基本概念和技术。下面将详细讨论涉及到的相关知识点。 1. **Android Studio**:作为Android...
【手机备忘录程序】是一种常见且实用的智能手机应用程序,主要功能是帮助用户记录日常生活、工作中的重要事项或想法,确保不会遗忘待办任务。它通常具有简洁的用户界面和高效的提醒机制,使得用户可以方便地创建、...
7. **多线程编程**:如果提醒功能需要在后台运行,可能需要使用多线程技术,确保不影响主界面的正常操作。 8. **代码组织**:易语言项目通常包含多个模块,每个模块负责不同的功能。理解如何合理划分模块和编写清晰...
在快速发展的信息技术领域,程序员们经常需要处理大量的代码,为了提高工作效率和代码管理能力,一款优秀的代码备忘录软件是必不可少的。本文将深入探讨“代码备忘录”这一经典工具,揭示其核心功能和优势,并分享...
在备忘录软件中,日历是核心功能之一。开发人员需要设计和实现一个自定义的日历控件,用户可以通过该控件查看日期、添加、编辑和删除备忘录。日历控件通常会包含月份切换、日期选择、事件标记等功能,确保用户能直观...
- **Touch ID/Face ID集成**: 在原版备忘录中,用户可通过生物识别技术快速解锁查看备忘录。 7. **其他辅助功能** - **提醒与时间戳**: 可以设置备忘录的提醒时间,帮助用户记住重要事项。 - **智能建议**: 原版...
5. **多线程与提醒服务**:如果备忘录需要在后台运行并触发提醒,可能需要使用到多线程技术。DELPHI的TThread类可以帮助你创建和管理线程,而TTask或TMemoTask则可以实现异步任务,比如定时检查提醒。 6. **错误...
【安卓备忘录】是一款专为安卓平台设计的应用程序,其核心功能是提供闹钟提醒与备忘录记录服务。这款应用充分利用了Eclipse这一强大的Java集成开发环境进行开发,展示了Android平台上事件管理与用户界面设计的技术...
在本项目实例中,我们探讨的是一个基于微信小程序的备忘录应用。微信小程序是一种轻量级的应用开发平台,特别适合构建无需下载安装即可使用的移动应用。该项目旨在提供记录文字、计时以及设置提醒的基本功能,以满足...
在Android平台上,开发一个备忘录应用程序涉及到多个关键知识...以上是基于给定的文件名和描述,对Android备忘录应用实现所涉及的关键技术点的详细解释。理解并熟练掌握这些知识点对于成功构建一个备忘录应用至关重要。
以上就是关于“备忘录.NET C#”的相关知识点,从数据库交互到用户界面设计,再到定时提醒功能的实现,涵盖了多个C#开发的核心概念和技术。这个备忘录应用的实现,不仅锻炼了开发者在.NET平台上的实际操作能力,也...
在Android平台上开发手机备忘录应用时,主要涉及以下几个关键技术点: 1. **用户界面(UI)设计**:一个优秀的备忘录应用需要具备直观易用的界面,让用户能够快速添加、查看和编辑备忘。这涉及到布局管理器(如...
【Android备忘录源码】是一个适用于Android平台的软件开发项目,主要功能是实现一个备忘录应用。这个源码可以作为一个学习资源,用于Android课程设计或者毕业设计,为开发者提供了一个实际操作的实例,帮助他们理解...
在IT行业中,数据库是存储和管理数据的核心工具,而在C#编程环境中,我们可以利用各种数据库技术来构建备忘录应用程序。C#备忘录数据库代码通常涉及到如何在C#中与数据库进行交互,以实现创建、读取、更新和删除...
7. 用户交互:Winform应用通常会响应用户的各种操作,如点击按钮添加新备忘录、双击列表项查看详细信息等,这些交互都需要通过事件处理程序来实现。 8. 错误处理:良好的错误处理是任何应用的关键部分,备忘录应用...