zoukankan      html  css  js  c++  java
  • 从另一个小程序接着说 C++快速入门04

    从另一个小程序接着说

     

    让编程改变世界

    Change the world by program


     

    文件I/O

      前边我们已经给大家简单介绍和演示过C和C++在终端I/O处理上的异同点。 现在我们接着来研究文件I/O。   编程任务:编写一个文件复制程序,功能实现将一个文件复制到另一个文件。 例如:fileCopy  sourceFile  destFile   C语言版实例分析:fileCopy.c (源代码下载)  

    重点分析

     

    argc与argv[]

    在程序中,main 函数有两个参数,整型变量argc和字符指针数组argv[]。   argc的含义是程序的参数数量,包含本身。 argv[]的每个指针指向命令行的一个字符串,所以argv[0]指向字符串"copyFile.exe"。 argv[1]指向字符串sourceFile,argv[2]指向字符串destFile。   in和out是我们声明的两个文件指针,它们的类型都是FILE*,分别作为两个 I/O 流对象使用。 if( argc != 3 ) 是为了确保程序参数个数的正确性。   通过fopen()函数我们以二进制的形式按可读/可写方式打开两个文件并返回两个文件指针给in和out。 为了确保文件成功打开,我们还对fopen()的返回值进行了检查,如果为成功打开,我们就向标准错误流stderr发送一条消息。   getc() 函数一次从输入流(stdin) 读取一个字符,putc() 函数把这个字符写入到输出流(stdout)。 当getc() 遇到文件结束标志的时候,函数就返回 EOF。EOF 是一个宏,在stdio.h中定义,其值为一个负整数,通常是 -1。   EOF 事实上有两个含义:MSDN 注意细节,getc() 的返回值是 int 类型哦,所以我们声明时应该是 int ch。而不是char ch。  

    C++的文件操作

      由于我们这个C++ 的版本相对有点不同,对类和对象的应用比较多和烦,但是由于我们现在还没开始讲解类和对象,所以大家现在尽管“先用”, 暂时可以不求甚解!等到实际学了类和对象,大家回过头来看,就明白了一切!有些朋友可能会问:为什么不先把类和对象讲清楚呢?   我们依旧老规矩,以实例为主,以事实说话: 例子一:example1.cpp (源代码下载)   从刚刚的例题我们得到的信息是C++ 由于有类的封装,很多东西都变得更加“仔细”了! 上边的例题我们用到的是文件的读取类 ifream。 接着我们结合例题来说说文件的写入要用到的类 ofream。     例题二:example2.cpp (源代码下载)   在前边两个例子中我们出现:

    ifstream in;

    in.open( "test.txt" );

    ofstream out;

    out.open( "test.txt" );

    它们都是用一个open 函数来完成打开文件的功能。当然,这不是唯一的方法,我们还可以这样实现。

    ifstream in( "test.txt" );

    ofstream out( "test.txt" );

    请大家自行体验。   以上代码在创建一个ifstream 和ofstream 类的对象时,将文件的名字传递给它们的构造函数。 暂时我们可以这么理解构造函数:就是对象默认使用的函数(方法)。 那么这两种方法有什么区别吗?结论是没有区别!   事实上它还可以接受不止一个参数! 下边我们给出一个接受两个参数的实例:

    ifstream  in( char* filename, int open_mode)

    其中,filename 表示文件的名称,它是一个字符串; open_mode 表示打开模式,其值用来定义以怎样的方式打开文件(跟open的参数一样哈)。  

    下面给出几种常见的打开模式:

    ios::in -- 打开一个可读取文件

    ios::out -- 打开一个可写入文件

    ios::binary -- 以二进制的形式打开一个文件。

    ios::app -- 写入的所有数据将被追加到文件的末尾

    ios::trunk -- 删除文件原来已存在的内容

    ios::nocreate -- 如果要打开的文件并不存在,那么以此参数调用open 函数将无法进行。

    ios::noreplece -- 如果要打开的文件已存在,试图用open 函数打开时将返回一个错误。

      下边我们给出一个关于如何使用打开模式的例子。 例子三:example3.cpp (源代码下载)   那有些同学或许会问了,如果我需要的不只是一种打开模式,要多种并存怎么办呢? 我们只需要使用 OR 操作符:“|” 例子四:example4.cpp (源代码下载)  

    课后作业

      到了这里,fileCopy.cpp 这个程序应该由大家来编写了,不难吧?! ~O(∩_∩)O~ 合抱之木,生于毫末; 九层之台,起于累土; 千里之行,始于足下! [buy] 获得所有教学视频、课件、源代码等资源打包 [/buy] [Downlink href='http://urlxf.qq.com/?f2i2iie']视频下载[/Downlink] [Downlink href='http://kuai.xunlei.com/d/LQQDYHKGWGYU']备胎下载[/Downlink]
  • 相关阅读:
    安装lnmp 时如何修改数据库数据存储地址及默认访问地址
    ubuntu 设置root用户密码并实现root用户登录
    解决ubuntu 远程连接问题
    linux 搭建FTP服务器
    PHP 根据ip获取对应的实际地址
    如何发布自己的composer包
    使用composer安装composer包报Your requirements could not be resolved to an installable set of packages
    laravel 框架配置404等异常页面
    使用Xshell登录linux服务器报WARNING! The remote SSH server rejected X11 forwarding request
    IoTSharp 已支持国产松果时序数据库PinusDB
  • 原文地址:https://www.cnblogs.com/LoveFishC/p/3847074.html
Copyright © 2011-2022 走看看