BCB第十讲文件读写操作
C和C++文件读写操作
C&C++文件操作1C文件操作在ANSI C中,对文件的操作分为两种方式,即:✓流式文件操作✓I/O文件操作1.1 流式文件操作这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下:以下是引用片段:typedef struct {int level; /* fill/empty level of buffer */unsigned flags; /* File status flags */char fd; /* File descriptor */unsigned char hold; /* Ungetc char if no buffer */int bsize; /* Buffer size */unsigned char _FAR *buffer; /* Data transfer buffer */unsigned char _FAR *curp; /* Current active pointer */unsigned istemp; /* Temporary file indicator */short token; /* Used for validity checking */} FILE; /* This is the FILE object */FILE这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结构的指针来进行,此种文件操作常用的函数如下,下面是这些函数的功能使用说明:1.1.1fopen()功能:打开流fopen的原型是:FILE *fopen(const char *filename,const char *mode),fopen实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流返回一个FILR指针。
参数filename指向要打开的文件名,mode表示打开状态的字符串,其取值如下:●"r" 以只读方式打开文件●"w" 以只写方式打开文件●"a" 以追加方式打开文件●"r+" 以读/写方式打开文件,如无文件出错●"w+" 以读/写方式打开文件,如无文件生成新文件一个文件可以以文本模式或二进制模式打开,这两种的区别是:在文本模式中回车被当成一个字符'\n',而二进制模式认为它是两个字符0x0D,0x0A;如果在文件中读到0x1B,文本模式会认为这是文件结束符,也就是二进制模型不会对文件进行处理,而文本方式会按一定的方式对数据作相应的转换。
《C++程序设计》学习笔记总结 - 第八章 文件操作
第八章文件操作一、文件基本概念和文件流类文件基本概念和文件流类从不同的角度来看待文件就可以得到不同的文件分类。
C++根据文件数据的编码方式不同分为文本文件和二进制文件。
根据存取方式不同分为顺序存取文件和随机存取文件所谓“文本文件”和“二进制文件”是从文件格式的角度进行分类,是约定俗成的、从计算机用户角度出发进行的分类。
所谓的“顺序存取文件”和“随机存取文件”是根据访问文件中数据的方式来划分的。
顺序存取文件就是按照文件中数据存储次序进行顺序操作,为访问第i 个数据,就首先要访问第i-1个数据,在整个文件操作过程中,将移动位置指针的工作交给系统自动完成。
磁带文件就是一个典型的顺序存取文件。
随机访问文件是根据应用的需要,通过命令移动位置指针直接定位到文件内需要的位置并进行数据操作。
对文件的基本操作分为读文件和写文件。
所谓“读文件”就是将文件中的数据读入内存之中,也称为“输入”。
所谓“写文件”就是将内存中的数据存入文件之中,也称为“输出”。
C++标准类库中有3个流类可以用于文件操作,这3个类统称为文件流类,分别如下:1)ifstream:用于从文件中读取数据。
2)ofstream:用于向文件中写入数据。
3)fstream:既可用于从文件中读取数据,又可用于向文件中写入数据。
使用这3个流类时,程序中需要包含fstream头文件。
类ifstream和类fstream都是从类istream派生而来的,因此类ifstream拥有类istream的全部成员函数。
同样,类ofstream和类fstream也拥有类ostream的全部成员函数。
这3个类中有一些十分熟悉的成员函数可以使用,如operator<<、operator>>、peek( )、ignore( )、getline( )、get( )等。
在程序中,要使用一个文件,必须包含3个基本步骤:打开(open)文件——操作文件——关闭(close)文件。
BCB文件导入和导出的路径操作
return false;
}
}
}
inline bool __fastcall TfrmMain::PmsRenameFile(AnsiString strOldName,AnsiString strNewName)//文件重命名
AnsiString strBackDir = "C:\\PMSJYT\\BAKE\\";
AnsiString strBackDateAndTime = Now().FormatString("YYYYMMDDHHMMSS").c_str();
AnsiString strBackName = "DC"+strCzymc+strBackDateAndTime+".xls";
{
if (FileExists(strFileName) == true)
{
if (DeleteFile(strFileName) == true)
{
return true;
}
else
}
inline bool __fastcall TfrmMain::PmsCreateDir(AnsiString strDir) //创建指定路径的文件夹(可多级)
{
if (!Sysutils::DirectoryExists(strDir))
{
if (Sysutils::ForceDirectories(strDir) == true)
inline bool __fastcall TfrmMain::PmsCopyFile(AnsiString strFrom,AnsiString strTo)//文件拷贝
CC++关于文件的读写操作以及文件的打开和保存
CC++关于⽂件的读写操作以及⽂件的打开和保存通过近来的学习,总结⼀下关于⽂件的读写操作以及⽂件的打开和保存的⽅法。
⼀、⽂件的读写操作:(1)C语⾔对⽂件的读写操作在C语⾔中,对⽂件的读写操作是⽤FILE结构体和常⽤的对⽂件操作的函数实现的,下⾯总结⼀下C语⾔中对⽂件操作的常⽤函数:fopen() 打开以⽂件名指定的⽂件fwrite() 写⽂件fread() 读⽂件fseek() 移动⽂件的指针到新的位置通过该函数的参数设定的偏移量和初始位置rewind() 移动⽂件的指针到⽂件流的开始位置,在通常情况下可⽤fseek()实现相同的功能,但⼆者有区别ftell() 获得当前⽂件指针的位置,常⽤该函数获得⽂件的⽂件流的长度fflush() 刷新缓冲区中的内容,当⽂件写⼊时直接将⽂件流的内容从缓冲区写⼊磁盘,当读取⽂件时直接将磁盘⽂件写⼊缓冲区,⽽不必等程序运⾏结束或关闭程序。
fclose() 关闭⽂件memset() 在⼀段内存块中填充某个给定的值⽰例代码如下:/*********************************************************** C语⾔实现⽂件写操作 ************************************************************/FILE *pFile=fopen("CLanguage.txt","w");fwrite("CLanguage",1,strlen("CLanguage"),pFile);//fseek(pFile,0,SEEK_SET);//fwrite("实现⽂件写操作",1,strlen("实现⽂件写操作"),pFile);fclose(pFile);/*********************************************************** C语⾔实现⽂件读操作 ************************************************************/FILE *pFile=fopen("CLanguage.txt","r");//char ch[100];//memset(ch,0,100);//fread(ch,1,100,pFile);//MessageBox(ch);char* pBuf;int length;fseek(pFile,0,SEEK_END);length=ftell(pFile);pBuf=new char[length+1];//fseek(pFile,0,SEEK_SET);rewind(pFile);fread(pBuf,1,length,pFile);pBuf[length]=0;MessageBox(pBuf);fclose(pFile);注意:在⽤C语⾔实现⽂件的读操作时,要注意⽂件的指针位置。
bcb文件读写操作
bcb文件读写操作bcb文件读写操作 (转)2010-09-16 16:45在BCB提供的这组文件操作函数中,可分为三种类型,就是:1、文件名函数,2、文件管理函数;3、文件I/O函数。
1、文件名函数文件名函数可以对文件的名称、所在子目录、驱动器和扩展名等进行操作。
下表列出这些函数及其功能。
函数说明ExpandFileName() 返回文件的全路径(含驱动器、路径)ExtractFileExt() 从文件名中抽取扩展名ExtractFileName() 从文件名中抽取不含路径的文件名ExtractFilePath() 从文件名中抽取路径名ExtractFileDir() 从文件名中抽取目录名ExtractFileDrive() 从文件名中抽取驱动器名ChangeFileExt() 改变文件的扩展名ExpandUNCFileName() 返回含有网络驱动器的文件全路径ExtractRelativePath() 从文件名中抽取相对路径信息ExtractShortPathName() 把文件名转化为DOS的8·3格式MatchesMask() 检查文件是否与指定的文件名格式匹配下面就把这些函数作一一介绍:⑴ExpandFileName()原型:extern PACKAGE AnsiString __fastcall ExpandFileName(const AnsiString FileName);功能:返回文件的全路径(含驱动器、路径)参数:FileName:要处理的文件名例:ShowMessage(ExpandFileName(Application->ExeName));//显示你的程序文件名,如C:\MyBCB\Sample1.EXE⑵ExtractFileExt()原型:extern PACKAGE AnsiString __fastcall ExtractFileExt(const AnsiString FileName);功能:从文件名中抽取扩展名参数:FileName:要处理的文件名(全路径)例:ShowMessage(ExtractFileExt(Application->ExeName));//显示".exe"⑶ExtractFileName()原型:extern PACKAGE AnsiString __fastcall ExtractFileName(const AnsiString FileName);功能:从文件名中抽取不含路径的文件名参数:FileName:要处理的文件名例:ShowMessage(ExtractFileExt("c:\\Winnt\\SOL.EXE"));//显示"SOL.EXE"⑷ExtractFilePath()原型:extern PACKAGE AnsiString __fastcall ExtractFilePath(const AnsiString FileName);功能:从文件名中抽取路径名参数:FileName:要处理的文件名例:ShowMessage(ExtractFilePath("Winnt\\SOL.EXE"));//显示"Winnt\"⑸ExtractFileDir()原型:extern PACKAGE AnsiString __fastcall ExtractFileDir(const AnsiString FileName);功能:从文件名中抽取目录名(和上个函数不同,不包括最后的"\") 参数:FileName:要处理的文件名例:ShowMessage(ExtractFileDir("Winnt\\SOL.EXE"));//显示"Winnt",注意和上个函数的区别⑹ExtractFileDrive()原型:extern PACKAGE AnsiString __fastcall ExtractFileDrive(const AnsiString FileName);功能:从文件名中抽取驱动器名参数:FileName:要处理的文件名例:ShowMessage(ExtractFileDrive("c:\\Winnt\\SOL.EXE"));//显示"c:"⑺ChangeFileExt()原型:extern PACKAGE System::AnsiString __fastcallChangeFileExt(const System::AnsiString FileName, constSystem::AnsiString Extension);功能:更改文件名的扩展名,不是对真正的文件进行改名,只是对文件名这个字符串进行处理参数:FileName:要改名的文件名,Extension:新的扩展名例:ShowMessage(ChangeFileExt("c:\\Winnt\\SOL.EXE",".OOO"));//显示"c:\winnt\SOL.OOO"⑻ExpandUNCFileName()原型:extern PACKAGE AnsiString __fastcall ExpandUNCFileName(const AnsiString FileName);功能:返回含有网络驱动器的文件全路径,格式为:\\机器名\共享名\文件名参数:FileName:要处理的文件名例:ShowMessage(ExpandUNCFileName("F:\\Winnt\\SOL.EXE"));/*如果F:是映射的网络驱动器\\NT40\WINNT,则显示"\\NT40\WINNT\SOL.EXE"*/⑼ExtractRelativeP ath()原型:extern PACKAGE AnsiString __fastcall ExtractRelativePath(const AnsiString BaseName, const AnsiString DestName);功能:从文件名中抽取相对路径信息,如"..\sss\ss.asd"这种形式参数:BaseName:基准文件名;DestName:目标文件名例:ShowMessage(ExtractRelativePath("D:\\Source\\c\\1.123"," D:\\Source\\A sm\\dz.asm"));/*显示"..\asm\dz.asm"*/ ⑽ExtractShortPathName()原型:extern PACKAGE AnsiString __fastcallExtractShortPathName(const AnsiString FileName);功能:把文件名转换为DOS的8、3格式参数:FileName:要处理的文件名例:ShowMessage(ExtractShortPathName("E:\\Program Files\\Dual Wheel Mouse\\4dmain.exe"));/*显示"E:\Progra~1\dualwh~1\4dmain.exe"*/⑾MatchesMask()原型:extern PACKAGE bool __fastcall MatchesMask(const AnsiString Filename, const AnsiString Mask);功能:检查文件是否与指定的文件名格式匹配参数:FileName:要处理的文件名;Mask:文件名格式,支持通配符例:ShowMessage(MatchesMask("Lxf.exe","*.?x?));//显示"true"--------------------------------------------------------------------------------2、文件管理函数这类函数包括设置和读取驱动器、子目录和文件的有关的各种操作,下表列出这类操作常用的函数及其功能。
C++ builder 的文件读写操作总结
C++ builder 的文件读写操作总结在编程的过程中,文件的操作是一个经常用到的问题,在 C++Builder 中,可以 使用多种方法对文件操作,下面我就按以下几个部分对此作详细介绍,就是: 1、基于 C 的文件操作; 2、基于 C++的文件操作; 3、基于 WINAPI 的文件操作; 4、基于 BCB 库的文件操作; 5、特殊文件的操作。
1. 基于 C 的文件操作 在 ANSI C 中,对文件的操作分为两种方式,即流式文件操作和 I/O 文件操 作,下面就分别介绍之。
1)流式文件操作 这种方式的文件操作有一个重要的结构 FILE, FILE 在 stdio.h 中定义如下:以下是引用片段: 以下是引用片段: typedef struct { int level; /* fill/empty level of buffer */ unsigned flags; /* File status flags */ char fd; /* File descriptor */ unsigned char hold; /* Ungetc char if no buffer */ int bsize; /* Buffer size */ unsigned char _FAR *buffer; /* Data transfer buffer */ unsigned char _FAR *curp; /* Current active pointer */ unsigned istemp; /* Temporary file indicator */ short token; /* Used for validity checking */ } FILE; /* This is the FILE object */ FILE 这个结构包含了文件操作的基本属性,对文件的操作都要通过这个结 构的指针来进行,此种文件操作常用的函数如下: 函数 功能 fopen() 打开流fclose() 关闭流 fputc() 写一个字符到流中 fgetc() 从流中读一个字符 fseek() 在流中定位到指定的字符 fputs() 写字符串到流 fgets() 从流中读一行或指定个字符 fprintf() 按格式输出到流 fscanf() 从流中按格式读取 feof() 到达文件尾时返回真值 ferror() 发生错误时返回其值 rewind() 复位文件定位器到文件开始处 remove() 删除文件 fread() 从流中读指定个数的字符 fwrite() 向流中写指定个数的字符 tmpfile() 生成一个临时文件流 tmpnam() 生成一个唯一的文件名 下面就介绍一下这些函数 1.fopen() fopen 的原型是:FILE *fopen(const char *filename,const char *mode), fopen 实现三个功能:为使用而打开一个流,把一个文件和此流相连接,给此流 返回一个 FILR 指针。
《C++文件操作》课件
总结
C++文件操作的应用场景
深入了解C++文件操作的实际应用场景,包括数据 存储、日志记录和配置文件读取等。
学习文件操作的体会
分享学习文件操作的心得和体会,以及对进一步学 习的建议。
参考资料
• C++ Primer Plus 第15版 • C++ Primer Plus 第6版 • C++文件操作详解手册
文件基础
文件类型与扩展名
了解不同文件类型及其对应 的扩展名,包括文本文件和 二进制文件。
文件操作模式
学习文件的打开模式和操作 模式,如读取、写入和追加 等。
文件指针
理解文件指针的概念及其在 文件操作中的作用。
文件读写
1
打开文件和关闭文件
学习如何打开和关闭文件,并了解相关的错误处理。
2
文本文件的读写
学习如何定位文件中的特定位置并截断文件,保留需要的内容。
文件的异常处理
异常处理概述
了解异常处理的概念和作用,帮助程序在出现错误时进行恰当的处理。
C++异常处理
学习使用try-catch块处理C++中的异常,保证文件读写过程中可能出现的异常进行捕捉和处理的方法。
《C++文件操作》PPT课 件
这是一份关于C++文件操作的PPT课件,通过本课件,你将深入了解C++文件操 作的基础知识、读写文件的方法,以及文件指针和异常处理等内容。
前言
文件操作是指在计算机中对文件进行读取、写入和修改等操作的过程。C++文件操作在实际编程中扮演着重要 的角色,具有广泛的应用场景。
如何在C++中进行文件读写操作
如何在C++中进行文件读写操作在C++中进行文件读写操作是实现文件输入和输出的一种重要方式,通过文件读写操作可以将数据保存到文件中或者从文件中读取数据。
下面将详细介绍在C++中进行文件读写操作的基本方法和常用函数。
文件的读写操作主要围绕以下几个步骤展开:1.打开文件:进行文件读写操作之前,首先要打开文件。
C++提供了fstream库,可以通过它的对象来打开文件。
其中,fstream类是一个文件流类,可以用于读写文件。
在打开文件时,需要指定文件名以及打开模式(如只读、只写、读写等)。
打开模式有以下几种常用的类型:- ios::in:打开文件用于读取。
- ios::out:打开文件用于写入。
- ios::app:在文件末尾追加写入内容。
- ios::trunc:如果文件存在,删除文件内容。
- ios::ate:打开文件并将文件指针移至文件末尾。
可以使用filestream类的open()函数打开文件,示例代码如下:```cpp#include <iostream>#include <fstream>using namespace std;int main() {ofstream fout;fout.open("example.txt", ios::out);if (!fout) {cout << "文件打开失败!" << endl;return 1;}//文件打开成功,进行读写操作// ...fout.close(); //关闭文件return 0;}```上述代码中,打开example.txt文件,如果文件存在则打开,如果不存在则创建新的文件。
打开方式为输出模式。
2.文件读操作:打开文件成功后,可以使用文件流对象的<<运算符从文件中读取数据。
语法如下:```cppifstream fin;fin.open("example.txt", ios::in);if (!fin) {cout << "文件打开失败!" << endl;return 1;}int data;fin >> data; //读取文件中的数据// ...fin.close(); //关闭文件```上述代码中,读取example.txt文件中的整数数据。
文件读写操作
文件读写操作文件读写是计算机编程中常见的操作之一,它可以让程序从文件中读取数据或将数据写入文件。
在本文中,将探讨文件读写的一些基础知识和常用操作方法。
一、文件读取文件读取操作使得程序可以从外部文件中获取数据,并在需要时使用这些数据。
以下是几种常见的文件读取方法:1. 打开文件在进行文件读取之前,需要打开文件以获取文件句柄。
文件句柄是程序与文件之间的连接,通过句柄可以操作文件。
打开文件的方法因编程语言而异,但一般需要指定文件名和打开模式(只读、只写等)。
2. 读取文件内容一旦文件打开成功,就可以读取文件内容。
读取文件的方式有多种,常见的方法包括顺序读取、按行读取和按字节读取。
根据实际需求选择最适合的读取方式。
3. 关闭文件在文件读取完成后,需要关闭文件以释放资源。
关闭文件的操作是良好的编程习惯,可以避免资源浪费和文件损坏。
二、文件写入文件写入操作允许程序将数据写入外部文件,以便保存和持久化。
以下是几种常见的文件写入方法:1. 创建文件在进行文件写入之前,需要创建一个新文件以及打开该文件。
文件的创建方法因编程语言而异,但一般需要指定文件名和创建模式。
创建文件时,应确保文件名的唯一性和合法性。
2. 写入文件内容一旦文件打开成功,就可以进行文件写入操作。
写入文件的方式有多种,常见的方法包括顺序写入、按行写入和按字节写入。
根据需求选择最适合的写入方式。
3. 关闭文件文件写入完成后,同样需要关闭文件以释放资源。
关闭文件的操作十分重要,确保数据的完整性和一致性。
三、文件读写的注意事项在进行文件读写操作时,还需要注意以下几点:1. 异常处理可能发生各种异常状况,如文件不存在、文件损坏等。
程序应该对这些异常情况进行捕获和处理,以确保程序的健壮性。
2. 文件权限某些文件可能设置了只读或只写权限,程序需要适应文件权限进行相应的读写操作。
如果没有足够的权限,可能会导致文件读写失败。
3. 文件格式不同的文件具有不同的格式,例如文本文件、二进制文件等。
visual basic 2010.二进制文件的读写 概述及解释
visual basic 2010.二进制文件的读写概述及解释1. 引言1.1 概述在计算机科学领域中,二进制文件是一种存储和传输数据的重要格式。
与文本文件相比,二进制文件包含了以二进制形式表示的各种数据类型,如整数、浮点数、字符等。
这些文件在许多应用场景中都广泛使用,例如图像处理、音频视频编码等。
本篇文章将深入探讨在Visual Basic 2010中读取和写入二进制文件的方法和技巧。
通过学习如何读写二进制文件,读者可以更好地理解这些文件的内部结构,并能够利用在Visual Basic 2010中提供的功能来处理这些文件。
1.2 文章结构本文将按照以下结构进行介绍:首先,我们将从概述开始,在引言中对整个文章进行简要介绍,并解释研究的目标。
随后,我们将详细探讨在Visual Basic 2010中读取和写入二进制文件所需要的基本概念和原理。
接下来,我们会分别对二进制文件的读取过程和写入过程进行详细解析,并阐述每个步骤的具体操作方法。
最后,在结论部分,我们将总结文章内容并给出未来发展方向建议。
1.3 目的本文旨在帮助读者深入了解如何使用Visual Basic 2010读取和写入二进制文件。
通过对二进制文件读写过程的详细解释,读者将能够掌握在处理二进制文件时需要注意的关键步骤和技巧。
同时,本文也旨在引发读者对二进制文件的兴趣,并为将来更深入的研究提供指导方向。
2. 二进制文件的读写2.1 概述二进制文件是由一系列字节组成的文件,每个字节可以表示一个特定的数据。
与文本文件不同,二进制文件包含了原始的数字和字符数据,并且没有任何格式限制。
在计算机中,许多应用程序使用二进制文件来存储和读取数据,因为它们更高效、更快速。
在这一部分中,我们将介绍如何使用Visual Basic 2010进行二进制文件的读写操作。
首先,我们将探讨二进制文件的基本概念,然后详细说明Visual Basic 2010中提供的读写功能。
bcb操作文件2
BCB中的文件操作(5)默认分类2008-03-16 21:39:07 阅读142 评论0 字号:大中小订阅基于WINAPI的文件操作WINAPI提供了两种文件操作函数,一组是为了和16位程序兼容,这种函数比较简单;而另一种是专门为32位程序设计,在使用时就显得麻烦些,下面我就把这两组函数一一介绍:一、和16位程序兼容的一组函数∙OF_READ:以只读方式打开∙OF_READWRITE:以读写方式打开∙OF_WRITE:以只写方式打开还有如OF_SHARE_COMPAT 等属性,由于不太常用,为里就不一一介绍了。
⑵_lclose()原型:HFILE _lclose( HFILE hFile);功能:关闭文件,成功返回0参数说明:hFile:要关闭的句柄⑶_lread()原型:UINT _lread( HFILE hFile, // 文件句柄LPVOID lpBuffer, // 保存数据的缓冲区UINT uBytes // 要读取的长度);功能:读文件,返回实际读取的字符数,与此类似的还有个_hread()函数,可自行查阅帮助文件。
⑷_lwrite()原型:UINT _lwrite( HFILE hFile, // 文件句柄LPCSTR lpBuffer, // 保存数据的缓冲区UINT uBytes // 要写的长度);功能:写文件,返回实际写的字符数,与此类似的还有个_hwrite()函数,可自行查阅帮助文件。
⑸_llseek()原型:LONG _llseek( HFILE hFile, // 文件句柄LONG lOffset, // 移动的量int iOrigin // 移动的基准位置);功能:移动文件的读写位置,成功返回移动后的文件读写位置参数说明:iOrigin的取值是以下三种情况之一:∙FILE_BEGIN:文件头部∙FILE_CURRENT:文件当前位置∙FILE_END:文件尾部⑹_lcreat()原型:HFILE _lcreat( LPCSTR lpPathName, //要创建的文件名int iAttribute // 文件属性);功能:创建文件,成功返回其句柄参数说明:文件属性是以下值的和:∙0:普通文件∙1:只读文件∙2:隐含文件∙4:系统文件这几个函数的用法和所列的BCB库函数差不多,建议使用BCB的库函数。
c++ 标准模板库 文件读写流程
c++ 标准模板库文件读写流程下载温馨提示:该文档是我店铺精心编制而成,希望大家下载以后,能够帮助大家解决实际的问题。
文档下载后可定制随意修改,请根据实际需要进行相应的调整和使用,谢谢!并且,本店铺为大家提供各种各样类型的实用资料,如教育随笔、日记赏析、句子摘抄、古诗大全、经典美文、话题作文、工作总结、词语解析、文案摘录、其他资料等等,如想了解不同资料格式和写法,敬请关注!Download tips: This document is carefully compiled by theeditor.I hope that after you download them,they can help yousolve practical problems. The document can be customized andmodified after downloading,please adjust and use it according toactual needs, thank you!In addition, our shop provides you with various types ofpractical materials,such as educational essays, diaryappreciation,sentence excerpts,ancient poems,classic articles,topic composition,work summary,word parsing,copy excerpts,other materials and so on,want to know different data formats andwriting methods,please pay attention!C++标准模板库中的文件读写流程详解在C++编程中,处理文件读写是常见的任务之一。
BCB文件操作函数大全
如:
if not DirectoryExists('c:\5') then
CreateDir('c:\5');
也可以
if not DirectoryExists('c:\5\') then
CreateDir('c:\5\');
ExtractFileDrive :返回完整文件名中的驱动器,如"C:"
参数:FileName:要处理的文件名
例:ShowMessage(ExtractShortPathName("E:\\Program Files\\Dual Wheel Mouse\\4dmain.exe"));
/*显示"E:\Progra~1\dualwh~1\4dmain.exe"*/
⑾MatchesMask()
⑻ExpandUNCFileName()
3
原型:extern PACKAGE AnsiString __fastcall ExpandUNCFileName(const AnsiString FileName);
功能:返回含有网络驱动器的文件全路径,格式为:\\机器名\共享名\文件名
参数:FileName:要处理的文件名
例:ShowMessage(MatchesMask("Lxf.exe","*.?x?)); //显示"true"
2、文件管理函数
这类函数包括设置和读取驱动器、子目录和文件的有关的各种操作,下表列出这类操作常用的函数及其
功能。
函数功能
CreateDir()创建新的子目录
c++文件随机读写操作流程及常用方法
c++文件随机读写操作流程及常用方法
一、文件随机读写操作流程
1)打开文件:以不同的方式打开文件,为了能够进行随机读写操作,必须使用 ios::in | ios::out模式。
2)定位到文件的位置:使用seekg()和seekp()函数定位文件,其中seekg()函数可以定位文件的读指针,seekp()函数可以定位文件的写指针。
3)读写文件:使用get()和put()函数执行读写操作,get()函数可以从文件中读取数据,put()函数可以向文件中写入数据。
4)关闭文件:关闭文件,使用close()释放文件占用的资源。
二、常用方法
1)fstream类的open()成员函数:本函数用于打开文件,其参数有文件名、打开模式和默认属性,fstream类有三种构造函数,用于分别以只读、写入和读写模式打开文件。
2)fstream类的rdstate()成员函数:本函数用于获取文件操作的状态,返回值如果是0则表示没有发生错误,如果非0则表示发生了错误。
3)fstream类的eof()成员函数:本函数用于判断文件是否到达末尾,当文件到达末尾则返回true,否则返回false。
4)fstream类的seekg()和seekp()成员函数:seekg()成员函数用于设置读指针的位置,seekp()成员函数用于设置写指针的位置。
5)fstream类的get()、peek()、put()成员函数:get()成员函
数用于从文件中读取一个字符,peek()成员函数用于读取文件中下一个字符,put()成员函数用于向文件中写入一个字符。
6)fstream类的close()成员函数:本函数用于关闭文件,关闭文件后,文件所占资源将会被释放。
BCB读写文件
BCB读写文件//---------------------------------------------------------------------------//打开文件//---------------------------------------------------------------------------FILE * fp; //文件指针要加 #include "stdio.h"String file_L = Edit1->Text; //获取文件路径const char * file_H;file_H = (char *)file_L.c_str(); //将String 转换到 const char *fp = fopen(file_H,"r+"); //打开文件,文本方式,读和写if(fp!=NULL){Text_Out(">>> 打开文件成功......",3,1);}else Text_Out(">>> 打开文件失败",1,1);//---------------------------------------------------------------------------/* while(!feof(fp)) //非文件结尾,就读{char red = fgetc(fp);Text_Out(red,4,0);} *///---------------------------------------------------------------------------for(char i='A';i<'G';i++) //写文件{fputc(i,fp);}//---------------------------------------------------------------------------fclose(fp); //关闭文件//---------------------------------------------------------------------------例:char x[]="I Love You";fwire(x, 6,12,fp);//写入6*12=72字节将把"I Love"写到流fp中12次,共72字节bcb方法int fh = FileOpen(Edit1->Text, FILE_CSV|FILE_READ);//fmOpenRead|fmOpenWriteif(fh==-1) Text_Out(">>> 打开文件错误",1,1);else Text_Out(">>> 打开文件ok",3,1);FileClose(fh);、文件I/O函数这类函数完成对文件的读写相关的操作,这种类型的操作和C的基于I/O文件操作类似,下表列出这类操作常用的函数及其功能。
C++中对二进制文件的读写操作
C++中对二进制文件的读写操作二进制文件不是以ASCII代码存放数据的,它将内存中数据存储形式不加转换地传送到磁盘文件,因此它又称为内存数据的映像文件。
因为文件中的信息不是字符数据,而是字节中的二进制形式的信息,因此它又称为字节文件。
对二进制文件的操作也需要先打开文件,用完后要关闭文件。
在打开时要用ios::binary指定为以二进制形式传送和存储。
二进制文件除了可以作为输入文件或输出文件外,还可以是既能输入又能输出的文件。
这是和ASCII文件不同的地方。
一、用成员函数read和write读写二进制文件对二进制文件的读写主要用istream类的成员函数read和write 来实现。
这两个成员函数的原型为istream& read(char *buffer,int len);ostream& write(const char * buffer,int len);字符指针buffer指向内存中一段存储空间。
len是读写的字节数。
调用的方式为a. write(p1,50);b. read(p2,30);例.14 将一批数据以二进制形式存放在磁盘文件中。
#include <fstream>using namespace std;struct student{char name[20];int num;int age;char sex;};{studentstud[3]={"Li",1001,18,'f',"Fun",1002,19,'m',"Wang",1004,17,'f'};ofstream outfile("stud.dat",ios::binary);if(!outfile){cerr<<"open error!"<<endl;abort( );//退出程序}for(int i=0;i<3;i++)outfile.write((char*)&stud[i],sizeof(stud[i]));outfile.close( );return 0;}其实可以一次输出结构体数组的个元素,将for循环的两行改为以下一行:outfile.write((char*)&stud[0],sizeof(stud));执行一次write函数即输出了结构体数组的全部数据。
文件的读写 C++程序设计课件
说明了流对象之后,可以使用函数open()打开文件。文件的 打开即是在流与文件之间建立一个连接。
写文本文件
文本文件是程序开发经常用到的文件,使用记事本程序就 可以打开文本文件,文本文件以txt作为扩展名,其实上一 节已经使用ifstream和ofstream类创建并写入了文本文件, 这一节主要应用fstream来写入写入文件信息,下面通过实例来介绍一下 如何读取文本文件的内容。
二进制文件的读写
文本文件中的数据都是ASCII码,如果要读取图片的内容, 就不能使用读取文本文件的方法了,以二进制的方式读写 文件,需要使用ios::binary模式,
实现文件复制
用户在进行程序开发时,有时候需要复制等操作,下面就 来通过介绍一下用于复制文件的方法
文件的读写
在对文件进行操作时,必然离不开读写文件。在使用程序 查看文件内容时,首先要读取文件,而要修改文件内容时, 则需要向文件中写入数据,本节就主要介绍通过程序对文 件的读写操作
文件流 (1)流可以分为3类,输入流,输出流及输入/输出流,相 应的必须将流说明为ifstream、ofstream以及fstream类的对 象。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文件读写操作上一讲我们学习了事件和事件处理函数的有关知识,并为Mp3Collect程序添加的进行记录操作的代码,但是程序还缺少保存记录的功能,以至于当程序退出之后,我们辛苦输入的记录就丢失了,因此在本讲中,我们就首先来学习有关文件读写操作的知识,然后继续添加事件处理函数,实现查询记录的功能。
在应用程序中保存信息和数据的常用方法有三种:第一种是保存在Windows的注册表中,第二种是保存在程序专用的文件中,第三种则是保存在数据库中。
第一种方法只适合于保存少量关键的信息,例如程序的参数和选项,对于我们的例子程序来说,歌曲记录的数量可以是非常多的,因此不适合保存在注册表中。
第二种方法是最常用的,也比较容易实现,因此现在我们先采用第二种方法来保存记录。
第三种方法对于保存大量结构化的数据是最有效的,例如Mp3Collect的歌曲记录,但实现起来相对要复杂得多,在讲座的后面我们再来学习数据库操作方法。
用于文件操作的函数也有很多种,我们选择使用I/O流函数和FILE *指针来进行对文件的操作,因为这些函数符合ANSI C/C++规范,可移植性较好,能够用于Win32、Unix平台,是比较常用的文件操作方式。
I/O流函数和FILE结构的声明和定义位于头文件stdio.h中。
保存记录文件首先,为主窗体类添加一个SaveFile()成员函数。
在类浏览器中找到TMainForm类,用右键单击该类,在关联菜单中选择NewMethod命令,就会弹出如图10-1所示的AddMethod对话框。
在其中的Method Name中输入新的成员函数名SaveFile,函数的参数(Arguments)为空,返回类型为void,即没有返回值。
函数的访问权限为私有的(Private),函数的调用方式为__fastcall,这是因为按照CBuilder的规定,所有窗体类的成员函数的调用方式都必须为__fastcall方式。
设置好这些函数属性后,按下“OK”按钮,CBuilder就会自动添加好SaveFile()函数的框架。
接下来在SaveFile()函数中添加代码,实图10-1:Add Method对话框现保存文件的功能。
我们约定保存记录的文件名为Mp3Collect.sav,文件目录为当前工作目录,当前工作目录是通过调用GetCurrentDir()函数获得的。
文件的格式为普通的文本文件,每个列表项的内容以字符串的方式写入文件中,其中每个字符串为单独的一行,因此每个列表项在文件中占三行。
在对文件进行I/O流操作之前,首先需要打开文件,并获取文件的FILE*指针。
我们通过fopen()函数以文本以及创建新文件的方式打开Mp3Collect.sav文件,然后读取ListView1中的列表项,利用函数fprintf()将每个列表项的内容写入文件中。
下面SaveFile()函数的实现代码:void __fastcall TMainForm::SaveButtonClick(TObject *Sender){FILE * fp;//获取当前工作目录,并构造含路径的文件全名。
其中,文件名与路径用斜线'\'分开,//在CBuilder中用双引号构造字符串时,连续两个斜线表示实际字符串中的一个斜线。
AnsiString sFilePath =GetCurrentDir()+AnsiString("\\Mp3Collect.sav");//fopen函数的第一个参数表示文件名。
第二个参数为打开文件的方式,其中w表示以创建//文件打开,t表示以文本方式打开。
fp=fopen(sFilePath.c_str(),"wt");//fopen返回文件指针,如果为无效的指针,则显示出错信息并返回if(fp==NULL){ShowMessage("不能打开文件Mp3Collect.sav,请检查是否为共享冲突");return;}int i;TListItem * theItem;//循环遍历列表框ListView1的所有列表项for(i=0;i<ListView1->Items->Count;i++){//通过ListView1的Items属性获得它的第i个列表项theItem=ListView1->Items->Item[i];//将列表项中的记录信息分别写入文件中,每个字符串后插入回车换行字符。
fprintf(fp,"%s\n\r%s\n\r%s\n\r",theItem->Caption,theItem->SubItems->Strings[0],theItem->SubItems->Strings[1]);}//关闭文件fclose(fp);}S aveFile()功能实现后,还要在合适的地方调用该函数,以真正实现保存记录的功能了。
由于每次添加、删除、修改记录项都使记录集的内容发生了变化,我们可以在AddSongClick()、BtnModifySongClick()和BtnDeleteSongClick()函数返回前调用SaveFile(),及时保存记录集的最新信息。
读取文件中的记录接下来我们继续实现从文件中读取记录,并将其显示在列表框ListView1中的功能。
在编辑状态下,双击主窗体上的“所有MP3”按钮,添加事件处理函数BtnShowAllClick(),在该函数中以文本和只读方式打开文件Mp3Collect.sav,利用fgets()函数从文件中一次读入一个字符串,每三个字符串构成一个列表项,并将列表项添加到列表框ListView1中,具体的实现代码如下所示:void __fastcall TMainForm::BtnShowAllClick(){FILE * fp;//获取当前工作目录,并构造含路径的文件全名。
AnsiString sFilePath =GetCurrentDir()+AnsiString("\\MP3Collect.sav");//fopen函数的打开文件方式参数中,其中r表示以只读方式,t表示以文本方式打开。
fp=fopen(sFilePath.c_str(),"rt");int i,j;char strbuf[255];TListItem * theItem;ListView1->Items->Clear();//清除列表框ListView1中的内容if(fp!=NULL) //如果文件存在,则返回的文件指针不为空,才能继续下面的操作{i=0;//i指示添加到第几个列表项while(!feof(fp)) //判断是否读到了文件尾{theItem=ListView1->Items->Add();//添加一项新的列表项for(j=0;j<3;j++) //连续读三个字符串{if(fgets(strbuf,255,fp)==NULL) //如果字符串为空,表示文件已结束{ListView1->Items->Delete(i);break;}//将字符串值赋给列表项,因为读出的字符串中可能包括回车换行等不能//显示的字符,因此用AnsiString的Trim函数去除这些字符if(j==0) theItem->Caption=AnsiString(strbuf).Trim();else theItem->SubItems->Add(AnsiString(strbuf).Trim());}i++;}}fclose(fp);//每次对文件操作完毕后,都要关闭文件}查询显示除了显示所有MP3记录之外,我们还要为程序添加按条件查询并显示特定记录的功能。
为了简单起见,我们约定查询条件也在记录输入框中输入。
例如,在文件名中输入“A”,表示记录的文件名部分必须包括A,在歌曲名称中输入“月亮”则表示记录的歌曲名称中必须包括“月亮”,如果某个输入框为空白,则表示不检查该部分内容。
三个查询条件之间是与的关系,即,输入的条件越多,查询标准越严格。
查询操作的原理和显示所有记录的原理基本一致,也需要打开Mp3Collect.sav文件,读取其中所有记录信息,不同的是,查询操作需要将记录的各部分内容与条件输入框中的内容相比较,只有符合要求的记录项才会显示在列表框中。
查询操作中进行条件比较的方法是利用AnsiString类的Pos()函数,检测字符串中是否包括查询条件中指定的子字符串。
为了添加查询显示功能,首先在窗体上双击“查找”按钮,添加事件响应函数BtnFindClick(),并为该函数添加如下代码:void __fastcall TMainForm:: BtnFindClick (TObject *Sender){FILE * fp;//获取当前工作目录,并构造含路径的文件全名。
A nsiString sFilePath =GetCurrentDir()+AnsiString("\\MP3Collect.sav");fp=fopen(sFilePath.c_str(),"rt");//以只读、文本方式打开文件。
int i,j ,bFound;char strbufFileName[100],strbufSongName[100],strbufSingerName[100];TListItem * theItem;ListView1->Items->Clear();//清除列表框内原有的内容if(fp!=NULL) //如果文件存在,则返回的文件指针不为空,才能继续下面的操作{i=0; //i指示添加到第几个列表项while(!feof(fp)) //判断是否读到了文件尾{if(fgets(strbufFileName,100,fp)==NULL) break;if(fgets(strbufSongName,100,fp)==NULL) break;if(fgets(strbufSingerName,100,fp)==NULL) break;bFound=TRUE;//bFound为是否符合查询条件标志,预先设定为TRUE//如果“文件名称”输入框不为空,则判断strbufFileName中是否包括//“文件名称”输入条件if(!edtFileName->Text.IsEmpty())if(!(AnsiString(strbufFileName).Pos(edtFileName->Text))) bFound=FALSE;//检查“歌曲名称”查询条件if(!edtSongName->Text.IsEmpty())if(!(AnsiString(strbufSongName).Pos(edtSongName->Text))) bFound=FALSE;//检查“歌手名称”查询条件if(!edtSingerName->Text.IsEmpty())if(!(AnsiString(strbufSingerName).Pos(edtSingerName->Text))) bFound=FALSE;if(bFound) //如果符合查询条件,则添加到列表框控件中。