温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Cookbook系列之Cpp:数据流与文件

发布时间:2020-07-10 10:56:36 来源:网络 阅读:314 作者:zxn990 栏目:移动开发

问题01:如何垂直排列文本输出,使其左对齐或右对齐

    使用标准的流操作符来设置字段的宽度和对齐方式。一个操作符就是操作在流上的函数,通过操作符<<将这些操作函数应用到流上。

  1. #include <iostream>
  2. #include <iomanip>                                                                
  3.                                                                                   
  4. using namespace std;                                                              
  5.                                                                                   
  6. int main()                                                                        
  7. {                                                                                 
  8.     ios_base::fmtflags flags = cout.flags();                                      
  9.     int width = 10;                                                               
  10.                                                                                   
  11.     cout << left                                                                  
  12.          << setw(width) << "Jim"                                                  
  13.          << setw(width) << "Tom"                                                  
  14.          << setw(width) << "Bill" << endl;                                        
  15.                                                                                   
  16.     cout << right                                                                 
  17.          << setfill('.')                                                          
  18.          << setw(width) << "Jim"                                                  
  19.          << setw(width) << "Tom"                                                  
  20.          << setw(width) << "Bill" << endl;                                        
  21.                                                                                   
  22.     return 0;                                                                     
  1. // output 
  2. Jim       Tom       Bill       
  3. .......Jim.......Tom......Bill 

问题02:如何格式化输出浮点数

    使用<iomanip>和<ios>提供的标准操作来控制写入流中的浮点数的格式。

  1. #include <iostream>
  2. #include <iomanip>                                                                
  3. #include <ios>                                                                    
  4.                                                                                   
  5. using namespace std;                                                              
  6.                                                                                   
  7. int main()                                                                        
  8. {                                                                                 
  9.     ios_base::fmtflags flags = cout.flags();                                      
  10.     double pi = 3.14159265;                                                       
  11.                                                                                   
  12.     cout << setprecision(5) << pi << endl;                                        
  13.                                                                                   
  14.     cout << fixed << showpos << setprecision(3) << pi << endl;                    
  15.                                                                                   
  16.     cout << scientific << noshowpos << pi << endl;                                
  17.                                                                                   
  18.     cout.flags(flags);                                                            
  19.                                                                                   
  20.     return 0;                                                                     
  1. // output 
  2. 3.1416 
  3. +3.142 
  4. 3.142e+00 

问题03:如何复制文件

    使用<fstream>中的C++文件流来把数据从一个流复制到另一个流。打开文件的方式在类ios中定义,常用的值如下:
>> ios::app:以追加的方式打开文件 
>> ios::ate:文件打开后定位到文件尾,ios:app就包含有此属性 
>> ios::binary:以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文 
>> ios::in:文件以输入方式打开 
>> ios::out:文件以输出方式打开 
>> ios::nocreate:不建立文件,所以文件不存在时打开失败  
>> ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败 
>> ios::trunc:如果文件存在,把文件长度设为0 

  1. #include <fstream> 
  2.  
  3. using namespace std; 
  4.  
  5. int main() 
  6.     fstream in("/root/.bashrc", ios::binary | ios::in); 
  7.     fstream out("/tmp/bashrc", ios::binary | ios::out); 
  8.  
  9.     out << in.rdbuf(); 
  10.  
  11.     in.close(); 
  12.     out.close(); 
  13.  
  14.     return 0; 

问题04:如何删除或重命名文件,并且这些操作是可移植的

    使用定义在<cstdio>中的标准C函数remove和rename。如果操作失败,函数将返回非零值,并设置errno。你可以使用strerror来将错误信息输出到cerr流中。

问题05:如何创建临时文件

    有两种办法可以用来创建一个临时文件。声明在<cstdio>中的tmpfile函数不带任何参数,并且成功后返回一个FILE*指针,不成功返回一个NULL。你可以使用C的输入输出函数fread、fwrite、fgets、fputs等来操作它。tmpfile使用"wb+"的方式打开文件,并在程序退出后,自动删除该文件。

    如果你需要一个具名的临时文件,那么tmpnam可以满足你的要求。tmpnam事实上不会产生一个临时文件,它只是创建一个唯一的文件名,你可以用这个文件名来打开一个文件。tmpnam带一个char*类型的参数并返回一个char*类型的值。你可以使用一个指向一个字符缓存的指针来传递它,但必须至少有L_tmpnam内存,tmpnam将复制这个临时的名字,并且返回一个指向这个缓存的指针。如果你传递一个NULL值的话,tmpfile将返回一个指向一个包含文件名的静态缓存指针,也就意味着随后的tmpnam调用将会改写它。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI