当前位置: 首页 > news >正文

c语言mfc删除文件夹,C、C++和MFC中文件的读写方法

对文件读写的三种方法

1.C中

FILE *pFile=fopen("1.txt","w");

fwrite("http://www.sunxin.org",1,strlen("http://www.sunxin.org"),pFile");

//fseek(pFile,0,SEEK_SET);

//fwrite("ftp:",1,strlen("ftp:"),pFile);

//fwrite("http://www.sunxin.org",1,strlen("http://www.sunxin.org"),pFile");

fclose(pFile);*/

//fflush(pFile);

表头文件 #include

FILE * fopen(const char * path,const char * mode);

函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。

mode有下列几种形态字符串:

int fseek( FILE *stream, long offset, int origin );

第一个参数stream为文件指针

第二个参数offset为偏移量,整数表示正向偏移,负数表示负向偏移

第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET

SEEK_CUR: 当前位置

SEEK_END: 文件结尾

SEEK_SET: 文件开头

其中SEEK_CUR,SEEK_END和SEEK_SET依次为1,2和0

:fwrite(buffer,size,count,fp);

(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。

(2)size:要写入的字节数;

(3)count:要进行写入size字节的数据项的个数;

(4)fp:目标文件指针。

int fread(void *ptr, int size, int nitems, FILE *stream);

参 数:用于接收数据的地址(指针)(ptr)

单个元素的大小(size)

元素个数(nitems)

提供数据的文件指针(stream)

:int fflush(FILE *stream)

功 能: 清除文件缓冲区,文件以写方式打开时将缓冲区内容写入文件

2.C++中

/* ofstream ofs("4.txt");

ofs.write("http://www.sunxin.org",strlen("http://www.sunxin.org"));

ofs.close();*/

要包括头文件 "fstream.h"

3.MFC中 用CFile类,哈哈!简单好用

CFileDialog fileDlg(FALSE);

fileDlg.m_ofn.lpstrTitle="我的文件保存对话框";

fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";

fileDlg.m_ofn.lpstrDefExt="txt";

if(IDOK==fileDlg.DoModal())

{

CFile file(fileDlg.GetFileName(),CFile::modeCreate | CFile::modeWrite);

file.Write("http://www.sunxin.org",strlen("http://www.sunxin.org"));

file.Close();

}

CFile操作详解

各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高效的代码,因而熟练的掌握文件操作是十分重要的。本文将对Visual C++中有关文件操作进行全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行详细的分析。

1.文件的查找

当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行文件的查找。下面这段代码演示了这个类的最基本使用方法。

CString strFileTitle;

CFileFind finder;

BOOL bWorking = finder.FindFile("C:\\windows\\sysbkup\\*.cab");

while(bWorking)

{

bWorking=finder.FindNextFile();

strFileTitle=finder.GetFileTitle();

}

2.文件的打开/保存对话框

让用户选择文件进行打开和存储操作时,就要用到文件打开/保存对话框。MFC的类CFileDialog用于实现这种功能。使用CFileDialog声明一个对象时,第一个BOOL型参数用于指定文件的打开或保存,当为TRUE时将构造一个文件打开对话框,为FALSE时构造一个文件保存对话框。

在构造CFileDialog对象时,如果在参数中指定了OFN_ALLOWMULTISELECT风格,则在此对话框中可以进行多选操作。此时要重点注意为此CFileDialog对象的m_ofn.lpstrFile分配一块内存,用于存储多选操作所返回的所有文件路径名,如果不进行分配或分配的内存过小就会导致操作失败。下面这段程序演示了文件打开对话框的使用方法。

CFileDialog mFileDlg(TRUE,NULL,NULL,

OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,

"All Files (*.*)|*.*||",AfxGetMainWnd());

CString str(" ",10000);

mFileDlg.m_ofn.lpstrFile=str.GetBuffer(10000);

str.ReleaseBuffer();

POSITION mPos=mFileDlg.GetStartPosition();

CString pathName(" ",128);

CFileStatus status;

while(mPos!=NULL)

{

pathName=mFileDlg.GetNextPathName(mPos);

CFile::GetStatus( pathName, status );

}

3.文件的读写

文件的读写非常重要,下面将重点进行介绍。文件读写的最普通的方法是直接使用CFile进行,如文件的读写可以使用下面的方法:

//对文件进行读操作

char sRead[2];

CFile mFile(_T("user.txt"),CFile::modeRead);

if(mFile.GetLength()<2)

return;

mFile.Read(sRead,2);

mFile.Close();

//对文件进行写操作

CFile mFile(_T("user.txt "), CFile::modeWrite|CFile::modeCreate);

mFile.Write(sRead,2);

mFile.Flush();

mFile.Close();

虽然这种方法最为基本,但是它的使用繁琐,而且功能非常简单。我向你推荐的是使用CArchive,它的使用方法简单且功能十分强大。首先还是用CFile声明一个对象,然后用这个对象的指针做参数声明一个CArchive对象,你就可以非常方便地存储各种复杂的数据类型了。它的使用方法见下例。

//对文件进行写操作

CString strTemp;

CFile mFile;

mFile.Open("d:\\dd\\try.TRY",CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite);

CArchive ar(&mFile,CArchive::store);

ar<

ar.Close();

mFile.Close();

//对文件进行读操作

CFile mFile;

if(mFile.Open("d:\\dd\\try.TRY",CFile::modeRead)==0)

return;

CArchive ar(&mFile,CArchive::load);

ar>>strTemp;

ar.Close();

mFile.Close();

CArchive的 << 和>> 操作符用于简单数据类型的读写,对于CObject派生类的对象的存取要使用ReadObject()和WriteObject()。使用CArchive的ReadClass()和WriteClass()还可以进行类的读写,如:

//存储CAboutDlg类

ar.WriteClass(RUNTIME_CLASS(CAboutDlg));

//读取CAboutDlg类

CRuntimeClass* mRunClass=ar.ReadClass();

//使用CAboutDlg类

CObject* pObject=mRunClass->CreateObject();

((CDialog* )pObject)->DoModal();

虽然VC提供的文档/视结构中的文档也可进行这些操作,但是不容易理解、使用和管理,因此虽然很多VC入门的书上花费大量篇幅讲述文档/视结构,但我建议你最好不要使用它的文档。关于如何进行文档/视的分离有很多书介绍,包括非常著名的《Visual C++ 技术内幕》。

如果你要进行的文件操作只是简单的读写整行的字符串,我建议你使用CStdioFile,用它来进行此类操作非常方便,如下例。

CStdioFile mFile;

CFileException mExcept;

mFile.Open( "d:\\temp\\aa.bat", CFile::modeWrite, &mExcept);

CString string="I am a string.";

mFile.WriteString(string);

mFile.Close();

4.临时文件的使用

正规软件经常用到临时文件,你经常可以会看到C:\Windows\Temp目录下有大量的扩展名为tmp的文件,这些就是程序运行是建立的临时文件。临时文件的使用方法基本与常规文件一样,只是文件名应该调用函数GetTempFileName()获得。它的第一个参数是建立此临时文件的路径,第二个参数是建立临时文件名的前缀,第四个参数用于得到建立的临时文件名。得到此临时文件名以后,你就可以用它来建立并操作文件了,如:

char szTempPath[_MAX_PATH],szTempfile[_MAX_PATH];

GetTempPath(_MAX_PATH, szTempPath);

GetTempFileName(szTempPath,_T ("my_"),0,szTempfile);

CFile m_tempFile(szTempfile,CFile:: modeCreate|CFile:: modeWrite);

char m_char='a';

m_tempFile.Write(&m_char,2);

m_tempFile.Close();

5.文件的复制、删除等

MFC中没有提供直接进行这些操作的功能,因而要使用SDK。SDK中的文件相关函数常用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()。它们的用法很简单,可参考MSDN。

1,判断文件是否存在

access(filename,mode);

2,对于不同用途又不同的文件操作,其中API函数CreateFile()也是比较有用处理方式,对于巨型文件很合适的其他的楼上的大都说了,不重复了.

[1]显示对话框,取得文件名

CString FilePathName;

CFileDialog dlg(TRUE);///TRUE为OPEN对话框,FALSE为S***E AS对话框

if (dlg.DoModal() == IDOK)

FilePathName=dlg.GetPathName();

相关信息:CFileDialog 用于取文件名的几个成员函数:

假如选择的文件是C:\WINDOWS\TEST.EXE

则(1)GetPathName();取文件名全称,包括完整路径。取回C:\WINDOWS\TEST.EXE

(2)GetFileTitle();取文件全名:TEST.EXE

(3)GetFileName();取回TEST

(4)GetFileExt();取扩展名EXE

[2]打开文件

CFile file("C:\HELLO.TXT",CFile::modeRead);//只读方式打开

//CFile::modeRead可改为 CFile::modeWrite(只写),

//CFile::modeReadWrite(读写),CFile::modeCreate(新建)

例子:

{

CFile file;

file.Open("C:\HELLO.TXT",CFile::modeCreate|Cfile::modeWrite);

}

[3]移动文件指针

file.Seek(100,CFile::begin);///从文件头开始往下移动100字节

file.Seek(-50,CFile::end);///从文件末尾往上移动50字节

file.Seek(-30,CFile::current);///从当前位置往上移动30字节

file.SeekToBegin();///移到文件头

file.SeekToEnd();///移到文件尾

[4]读写文件

读文件:

char buffer[1000];

file.Read(buffer,1000);

写文件:

CString string("自强不息");

file.Write(string,8);

[5]关闭文件

file.Close();

HANDLE CreateFile(

LPCTSTR lpFileName, //指向文件名的指针

DWORD dwDesiredAccess, //访问模式(写/读)

DWORD dwShareMode, //共享模式

LPSECURITY_ATTRIBUTES lpSecurityAttributes, //指向安全属性的指针

DWORD dwCreationDisposition, //如何创建

DWORD dwFlagsAndAttributes, //文件属性

HANDLE hTemplateFile //用于复制文件句柄

);

参数列表

lpFileName String 要打开的文件的名字

dwDesiredAccess Long 如果为 GENERIC_READ 表示允许对设备进行读访问;如果为 GENERIC_WRITE 表示允许对设备进行写访问(可组合使用);如果为零,表示只允许获取与一个设备有关的信息

dwShareMode Long, 零表示不共享; FILE_SHARE_READ 和/或 FILE_SHARE_WRITE 表示允许对文件进行共享访问

lpSecurityAttributes SECURITY_ATTRIBUTES, 指向一个SECURITY_ATTRIBUTES结构的指针,定义了文件的安全特性(如果操作系统支持的话)

dwCreationDisposition Long,下述常数之一:

CREATE_NEW 创建文件;如文件存在则会出错

CREATE_ALWAYS 创建文件,会改写前一个文件

OPEN_EXISTING 文件必须已经存在。由设备提出要求

OPEN_ALWAYS 如文件不存在则创建它

TRUNCATE_EXISTING 讲现有文件缩短为零长度

dwFlagsAndAttributes Long, 一个或多个下述常数

FILE_ATTRIBUTE_ARCHIVE 标记归档属性

FILE_ATTRIBUTE_COMPRESSED 将文件标记为已压缩,或者标记为文件在目录中的默认压缩方式

FILE_ATTRIBUTE_NORMAL 默认属性

FILE_ATTRIBUTE_HIDDEN 隐藏文件或目录

FILE_ATTRIBUTE_READONLY 文件为只读

FILE_ATTRIBUTE_SYSTEM 文件为系统文件

FILE_FLAG_WRITE_THROUGH 操作系统不得推迟对文件的写操作

FILE_FLAG_OVERLAPPED 允许对文件进行重叠操作

FILE_FLAG_NO_BUFFERING 禁止对文件进行缓冲处理。文件只能写入磁盘卷的扇区块

FILE_FLAG_RANDOM_ACCESS 针对随机访问对文件缓冲进行优化

FILE_FLAG_SEQUENTIAL_SCAN 针对连续访问对文件缓冲进行优化

FILE_FLAG_DELETE_ON_CLOSE 关闭了上一次打开的句柄后,将文件删除。特别适合临时文件

posted on 2009-07-29 10:07 The_Moment 阅读(11453) 评论(0)  编辑 收藏 引用 所属分类: VC理论

65cc76d90ad17a65785e1a600a9a4275.png

相关文章:

  • c语言课程设计背单词源代码,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  • android 图片资源目录下,Android编程实现获取图片资源的四种方法
  • 腾王阁序
  • android xml文件读写,向android系统下sdcard中写入一个xml文件和读取一个xml文件
  • Android实现蝴蝶动画,抖音蝴蝶特效怎么弄的?抖音最近很火的蝴蝶特效制作|安卓手机给视频添加蝴蝶特效...
  • 身为开发人员的您,准备好迎接Widows Mobile 6了吗?
  • android 指纹识别驱动 win10,win10怎么添加指纹识别?Win10 Windows Hello指纹登录设置教程...
  • MEDC 2007 倒计时
  • miui 7对应android系统,小米说MIUI 7和Android版本没有对应关系 你买账吗?
  • android接收富文本推送,iOS10富文本推送--NotificationServiceExtension
  • 围绕EMF探索(1)之存储和查询
  • android888是什么文件夹,Android资源文件及文件夹介绍
  • MEDC2007悉尼站略影-期待MEDCing之(一)
  • android 各别控件缩放,[翻译]Android单手指缩放-第二部分(Android one finger zoom tutorial – Part 2)...
  • 终于见到了马云;杭州——梦想的家园
  • IE9 : DOM Exception: INVALID_CHARACTER_ERR (5)
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • Angular2开发踩坑系列-生产环境编译
  • extract-text-webpack-plugin用法
  • JavaScript DOM 10 - 滚动
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • PHP那些事儿
  • redis学习笔记(三):列表、集合、有序集合
  • scala基础语法(二)
  • TypeScript迭代器
  • uni-app项目数字滚动
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 收藏好这篇,别再只说“数据劫持”了
  • 优化 Vue 项目编译文件大小
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​如何在iOS手机上查看应用日志
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • #if 1...#endif
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (2009.11版)《网络管理员考试 考前冲刺预测卷及考点解析》复习重点
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (超详细)2-YOLOV5改进-添加SimAM注意力机制
  • (附源码)spring boot儿童教育管理系统 毕业设计 281442
  • (附源码)springboot宠物医疗服务网站 毕业设计688413
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)shell中括号的特殊用法 linux if多条件判断
  • .net core 6 redis操作类
  • .Net7 环境安装配置
  • .NET开发人员必知的八个网站
  • .pyc文件是什么?
  • ;号自动换行
  • @cacheable 是否缓存成功_Spring Cache缓存注解
  • @transactional 方法执行完再commit_当@Transactional遇到@CacheEvict,你的代码是不是有bug!...
  • [2008][note]腔内级联拉曼发射的,二极管泵浦多频调Q laser——
  • [ANT] 项目中应用ANT