路由器进入-转码器下载

seek_set
2023年4月2日发(作者:vlc)

对文件读写的三种方法

1.C中

FILE*pFile=fopen("","w");

fwrite("",1,strlen(""),pFile");

//fseek(pFile,0,SEEK_SET);

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

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

fclose(pFile);*/

//fflush(pFile);

表头文件#include

FILE*fopen(constchar*path,constchar*mode);

函数说明参数path字符串包含欲打开的文件路径及文件名,参数mode字

符串则代表着流形态。

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

intfseek(FILE*stream,longoffset,intorigin);

第一个参数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:目标文件指针。

intfread(void*ptr,intsize,intnitems,FILE*stream);

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

单个元素的大小(size)

元素个数(nitems)

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

:intfflush(FILE*stream)

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

2.C++中

/*ofstreamofs("");

("",strlen(""));

();*/

要包括头文件"fstream.h"

中用CFile类,哈哈!简单好用

CFileDialogfileDlg(FALSE);

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

fileDlg.m_ilter="TextFiles(*.txt)0*.txt0AllFiles(*.*)0*.*00";

fileDlg.m_efExt="txt";

if(IDOK==l())

{

CFilefile(eName(),CFile::modeCreate|CFile::modeWrite);

("",strlen(""));

();

}

CFile操作详解

各种关于文件的操作在程序设计中是十分常见,如果能对其各种操作都了如

指掌,就可以根据实际情况找到最佳的解决方案,从而在较短的时间内编写出高

效的代码,因而熟练的掌握文件操作是十分重要的。本文将对VisualC++中有关

文件操作进行全面的介绍,并对在文件操作中经常遇到的一些疑难问题进行详细

的分析。

1.文件的查找

当对一个文件操作时,如果不知道该文件是否存在,就要首先进行查找。

MFC中有一个专门用来进行文件查找的类CFileFind,使用它可以方便快捷地进行

文件的查找。下面这段代码演示了这个类的最基本使用方法。

CStringstrFileTitle;

CFileFindfinder;

BOOLbWorking=le("C:windowssysbkup*.cab");

while(bWorking)

{

bWorking=xtFile();

strFileTitle=eTitle();

}

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

让用户选择文件进行打开和存储操作时,就要用到文件打开/保存对话框。

MFC的类CFileDialog用于实现这种功能。使用CFileDialog声明一个对象时,第一

个BOOL型参数用于指定文件的打开或保存,当为TRUE时将构造一个文件打开

对话框,为FALSE时构造一个文件保存对话框。

在构造CFileDialog对象时,如果在参数中指定了OFN_ALLOWMULTISELECT

风格,则在此对话框中可以进行多选操作。此时要重点注意为此CFileDialog对象

的m_ile分配一块内存,用于存储多选操作所返回的所有文件路径名,

如果不进行分配或分配的内存过小就会导致操作失败。下面这段程序演示了文件

打开对话框的使用方法。

CFileDialogmFileDlg(TRUE,NULL,NULL,

OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,

"AllFiles(*.*)|*.*||",AfxGetMainWnd());

CStringstr("",10000);

mFileDlg.m_ile=fer(10000);

eBuffer();

POSITIONmPos=rtPosition();

CStringpathName("",128);

CFileStatusstatus;

while(mPos!=NULL)

{

pathName=tPathName(mPos);

CFile::GetStatus(pathName,status);

}

3.文件的读写

文件的读写非常重要,下面将重点进行介绍。文件读写的最普通的方法是直

接使用CFile进行,如文件的读写可以使用下面的方法:

//对文件进行读操作

charsRead[2];

CFilemFile(_T(""),CFile::modeRead);

if(gth()<2)

return;

(sRead,2);

();

//对文件进行写操作

CFilemFile(_T(""),CFile::modeWrite|CFile::modeCreate);

(sRead,2);

();

();

虽然这种方法最为基本,但是它的使用繁琐,而且功能非常简单。我向你推

荐的是使用CArchive,它的使用方法简单且功能十分强大。首先还是用CFile声

明一个对象,然后用这个对象的指针做参数声明一个CArchive对象,你就可以非

常方便地存储各种复杂的数据类型了。它的使用方法见下例。

//对文件进行写操作

CStringstrTemp;

CFilemFile;

("d:",CFile::modeCreate|CFile::modeNoTruncate|CFile::mod

eWrite);

CArchivear(&mFile,CArchive::store);

ar<

();

();

//对文件进行读操作

CFilemFile;

if(("d:",CFile::modeRead)==0)

return;

CArchivear(&mFile,CArchive::load);

ar>>strTemp;

();

();

CArchive的<<和>>操作符用于简单数据类型的读写,对于CObject派生类的

对象的存取要使用ReadObject()和WriteObject()。使用CArchive的ReadClass()和

WriteClass()还可以进行类的读写,如:

//存储CAboutDlg类

lass(RUNTIME_CLASS(CAboutDlg));

//读取CAboutDlg类

CRuntimeClass*mRunClass=ass();

//使用CAboutDlg类

CObject*pObject=mRunClass->CreateObject();

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

虽然VC提供的文档/视结构中的文档也可进行这些操作,但是不容易理解、

使用和管理,因此虽然很多VC入门的书上花费大量篇幅讲述文档/视结构,但我

建议你最好不要使用它的文档。关于如何进行文档/视的分离有很多书介绍,包

括非常著名的《VisualC++技术内幕》。

如果你要进行的文件操作只是简单的读写整行的字符串,我建议你使用

CStdioFile,用它来进行此类操作非常方便,如下例。

CStdioFilemFile;

CFileExceptionmExcept;

("d:",CFile::modeWrite,&mExcept);

CStringstring="Iamastring.";

tring(string);

();

4.临时文件的使用

正规软件经常用到临时文件,你经常可以会看到C:WindowsTemp目录下有

大量的扩展名为tmp的文件,这些就是程序运行是建立的临时文件。临时文件

的使用方法基本与常规文件一样,只是文件名应该调用函数GetTempFileName()

获得。它的第一个参数是建立此临时文件的路径,第二个参数是建立临时文件名

的前缀,第四个参数用于得到建立的临时文件名。得到此临时文件名以后,你就

可以用它来建立并操作文件了,如:

charszTempPath[_MAX_PATH],szTempfile[_MAX_PATH];

GetTempPath(_MAX_PATH,szTempPath);

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

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

charm_char='a';

m_(&m_char,2);

m_();

5.文件的复制、删除等

MFC中没有提供直接进行这些操作的功能,因而要使用SDK。SDK中的文件

相关函数常用的有CopyFile()、CreateDirectory()、DeleteFile()、MoveFile()。它们

的用法很简单,可参考MSDN。

1,判断文件是否存在

access(filename,mode);

2,对于不同用途又不同的文件操作,其中API函数CreateFile()也是比较有用处

理方式,对于巨型文件很合适的其他的楼上的大都说了,不重复了.

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

CStringFilePathName;

CFileDialogdlg(TRUE);///TRUE为OPEN对话框,FALSE为S***EAS对话框

if(l()==IDOK)

FilePathName=hName();

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

假如选择的文件是C:

则(1)GetPathName();取文件名全称,包括完整路径。取回

C:

(2)GetFileTitle();取文件全名:

(3)GetFileName();取回TEST

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

[2]打开文件

CFilefile("C:",CFile::modeRead);//只读方式打开

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

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

例子:

{

CFilefile;

("C:",CFile::modeCreate|Cfile::modeWrite);

}

[3]移动文件指针

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

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

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

Begin();///移到文件头

End();///移到文件尾

[4]读写文件

读文件:

charbuffer[1000];

(buffer,1000);

写文件:

CStringstring("自强不息");

(string,8);

[5]关闭文件

();

HANDLECreateFile(

LPCTSTRlpFileName,//指向文件名的指针

DWORDdwDesiredAccess,//访问模式(写/读)

DWORDdwShareMode,//共享模式

LPSECURITY_ATTRIBUTESlpSecurityAttributes,//指向安全属性的指针

DWORDdwCreationDisposition,//如何创建

DWORDdwFlagsAndAttributes,//文件属性

HANDLEhTemplateFile//用于复制文件句柄

);

参数列表

lpFileNameString要打开的文件的名字

dwDesiredAccessLong如果为GENERIC_READ表示允许对设备进行读访问;

如果为GENERIC_WRITE表示允许对设备进行写访问(可组合使用);如果为零,

表示只允许获取与一个设备有关的信息

dwShareModeLong,零表示不共享;FILE_SHARE_READ和/或

FILE_SHARE_WRITE表示允许对文件进行共享访问

lpSecurityAttributesSECURITY_ATTRIBUTES,指向一个SECURITY_ATTRIBUTES

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

dwCreationDispositionLong,下述常数之一:

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

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

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

OPEN_ALWAYS如文件不存在则创建它

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

dwFlagsAndAttributesLong,一个或多个下述常数

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关闭了上一次打开的句柄后,将文件删除。特

别适合临时文件

更多推荐

seek_set