C++网络编程实现文件传输文件操作

新手园地& & & 硬件问题Linux系统管理Linux网络问题Linux环境编程Linux桌面系统国产LinuxBSD& & & BSD文档中心AIX& & & 新手入门& & & AIX文档中心& & & 资源下载& & & Power高级应用& & & IBM存储AS400Solaris& & & Solaris文档中心HP-UX& & & HP文档中心SCO UNIX& & & SCO文档中心互操作专区IRIXTru64 UNIXMac OS X门户网站运维集群和高可用服务器应用监控和防护虚拟化技术架构设计行业应用和管理服务器及硬件技术& & & 服务器资源下载云计算& & & 云计算文档中心& & & 云计算业界& & & 云计算资源下载存储备份& & & 存储文档中心& & & 存储业界& & & 存储资源下载& & & Symantec技术交流区安全技术网络技术& & & 网络技术文档中心C/C++& & & GUI编程& & & Functional编程内核源码& & & 内核问题移动开发& & & 移动开发技术资料ShellPerlJava& & & Java文档中心PHP& & & php文档中心Python& & & Python文档中心RubyCPU与编译器嵌入式开发驱动开发Web开发VoIP开发技术MySQL& & & MySQL文档中心SybaseOraclePostgreSQLDB2Informix数据仓库与数据挖掘NoSQL技术IT业界新闻与评论IT职业生涯& & & 猎头招聘IT图书与评论& & & CU技术图书大系& & & Linux书友会二手交易下载共享Linux文档专区IT培训与认证& & & 培训交流& & & 认证培训清茶斋投资理财运动地带快乐数码摄影& & & 摄影器材& & & 摄影比赛专区IT爱车族旅游天下站务交流版主会议室博客SNS站务交流区CU活动专区& & & Power活动专区& & & 拍卖交流区频道交流区
白手起家, 积分 33, 距离下一级还需 167 积分
论坛徽章:0
通过大家的帮助和自己的研究,上次的问题解决了一些但不是全部,这里列出更具体的问题,请大家指教
(上次的问题中,string是变长,但是不影响数据读写,用sizeof(string)就可,但不知道原理,有高手指点一下么?)
class Data
& &list & string &;
int main()
& &&&list&string&;::iterator I
& &&&fstream FileIO( &aaa.dat& , iosut | ios:in ) ;
& &&&d.data.push_back(&Li&quot ;
& &&&d.data.puch_back(&Zhang"
& &&&d.data.puch_back(&Liu"
& &&&for(Iter= d.data.begin() ; Iter!=d.data.end() ; Iter++)
& && && & FileIO( (const char*) ( &(*Iter) ) , sizeof(string) ) ;
& &&&}//调试时,这里只写了3次,没错
& & FileIO.seekg(0) ;
& && &while ( FileIO && !FileIO.eof() )//用FileIO.good()也是一样的
& && && && & FileIO.read( (char*) ( &str ) , sizeof(string) ) ;
& && && && & cout && str &&
& && & FileIO.close() ;
这里多输出了一次Liu,调试时读文件时也是读了4次,不知为什么呀,明明写了3个数据呀?& &为了正确的读出数据,我必须加一个计数器。
小富即安, 积分 3031, 距离下一级还需 1969 积分
论坛徽章:1
C++文件操作问题
FileIO( (const char*) ( &(*Iter) ) , sizeof(string) ) ; 复制代码这是怎么回事?
家境小康, 积分 1945, 距离下一级还需 55 积分
论坛徽章:0
C++文件操作问题
sizeof(string)
这样用会有问题的。
白手起家, 积分 33, 距离下一级还需 167 积分
论坛徽章:0
C++文件操作问题
sizeof(string)没有问题呀,很好呀
小富即安, 积分 3031, 距离下一级还需 1969 积分
论坛徽章:1
C++文件操作问题
我的问题...?
家境小康, 积分 1945, 距离下一级还需 55 积分
论坛徽章:0
C++文件操作问题
呵呵。单纯的sizeof(string)当然可以运行了,但你想过没有这其中的问题?我估计THEBEST想的跟我一样。
小富即安, 积分 3031, 距离下一级还需 1969 积分
论坛徽章:1
C++文件操作问题
[quote]原帖由 &assiss&]呵呵。单纯的sizeof(string)当然可以运行了,但你想过没有这其中的问题?我估计THEBEST想的跟我一样。[/quote 发表:
我倒不是问它这个sizeof的用法,我是说你那句代码都不完整.
你的代码居然还能出结果?什么编译器啊?
因为你的write(你忘记写了)for(Iter= d.data.begin() ; Iter!=d.data.end() ; ++Iter)&&//最好用++而不是++(int)
//FileIO.write((const char*) ( &(*Iter) ) , sizeof(string) ) ; //不需要这么麻烦且不好
&&FileIO.write(Iter-&;c_str(),sizeof(string));
} 复制代码sizeof(string)的结果是固定的4.而你用write就必需要保证Iter-&;c_str的确包含至少sizeof(string)个字符.而你这里没有保证,所以导致无法预期的后果.异常.....这些话不是对assiss说的哈. &&
这样的话,后面的还需要执行么?你的FileIO就直接OVER了下面根本没有一行输出,我不知道你的结果怎么来的,反正我上面什么也没有.而且还异常....
丰衣足食, 积分 742, 距离下一级还需 258 积分
论坛徽章:0
C++文件操作问题
FileIO.write(Iter-&;c_str(),sizeof(string));
sizeof(string)?????,这算什么啊?
sizeof(string)的结果是固定的4.而你用write就必需要保证Iter-&;c_str的确包含至少sizeof(string)个字符本来俺是明白的,让你们越说俺越糊涂了,就是有这些字符也被截了,写的也不是需要的信息啊,这么用根本就是错的嘛,编程当然是要解决问题了,如果逻辑都不对,也就是说根本就得不到需要的解,那程序是否能编译通过有很大的意义吗?faint死了
小富即安, 积分 3031, 距离下一级还需 1969 积分
论坛徽章:1
C++文件操作问题
不管程序写的是如何的差.string并不是这样用的.
你要写入string也是这样用的:
FileIO.read(const_cast&char *&;(str.c_str()), sizeof(string) ) ;
还有最后回答一下楼主的问题,我想这产关键的:
这里多输出了一次Liu,调试时读文件时也是读了4次,不知为什么呀,明明写了3个数据呀?因为是先读到文件尾才会导致eof被设置.也就是有三个数据:
读一次,再读一次,再读一次,(此时还没有设置EOF)但str中保存的是最后一次(第三次读的数据),接着还是进入while循环,因为还没有设置EOF,所以进行第四次才发现到了EOF,导致第四次任何数据也没有得到,所以str中仍然是第三次得到的数据,所以最后一个数据输出了两次,这个问题前不久有一个人问了.
丰衣足食, 积分 742, 距离下一级还需 258 积分
论坛徽章:0
C++文件操作问题
就是他问的,而且我也已经答过他了,他还在问,faint
北京盛拓优讯信息技术有限公司. 版权所有 京ICP备号 北京市公安局海淀分局网监中心备案编号:22
广播电视节目制作经营许可证(京) 字第1234号
中国互联网协会会员&&联系我们:
感谢所有关心和支持过ChinaUnix的朋友们
转载本站内容请注明原作者名及出处【图文】C++编程文件流的读写操作_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C++编程文件流的读写操作
阅读已结束,下载本文到电脑
登录百度文库,专享文档复制特权,积分每天免费拿!
你可能喜欢求助:C++编程对txt文件读写操作_百度知道
求助:C++编程对txt文件读写操作
有一个名叫data.txt的文件,里面的数据是这样的:
........(30行)
现在用C++实现:打开data.txt文件,读每行数据,之后两个数相加,然后输出写入到这行的后面保存。。例如:
我有更好的答案
楼上写的有点点错误,改了,可以达到楼主的目的#include&iostream&#include&fstream&void main(){ double a[30],b[30]; double sum[30]; int i = 0;
ifile.open(&data.txt&); while(ifile&&a[i]&&b[i]) {
sum[i]=a[i]+b[i];
i++; } ifile.close();
ofile.open(&data.txt&); int j = 0; while (j != i) {
ofile&&a[j]&&&
&&&b[j]&&&
&&&sum[j]&&
j++; } ofile.close();}
采纳率:67%
#include&iostream&#include&fstream&#include&sstream&#include&string&int main(){ double x[30], y[30]; double sum[30]={0}; int i,count=0;
ifs.open(&data.txt&); while(getline(ifs,line)&&count&30) {
istringstream is(line);
is && x[count] && y[count];
sum[count] = x[count] + y[count];
count++; } ifs.close();
ofs.open(&data.txt&); for (i = 0; i& i++) {
ofs && x[i] && &
& && y[i] && &
& && sum[i] && } ofs.close(); return 0;}
#include&iostream&#include&fstream&void main(){double a[30],b[30];double sum[30];ifile.open(&data.txt&);for(int i=1;i&=30;i++){ifile&&a[i]&&b[i];sum[i]=a[i]+b[i];}ifile.close();ofile.open(&data.txt&);for(int j=1;j&=30;j++){ofile&&a[j]&&&
&&&b[j]&&&
&&&sum[j]&&}ofile.close();}我直接在网页上写的,没编译检查,如果有错你再问我。
编译后ofile&&a[j]&&&
&&&b[j]&&&
&&&sum[j]&&这一行出错了。。提示说:error C2784: “std::basic_istream&_Elem,_Traits& &std::operator &&(std::basic_istream&_Elem,_Traits& &&,_Ty &)”: 未能从“std::ofstream”为“std::basic_istream&_Elem,_Traits& &&”推导 模板 参数
打反了,应该是ofile&&
为您推荐:
其他类似问题
您可能关注的内容
txt文件的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。C++ 是一种静态类型的、编译式的、通用的、大小写敏感的、不规则的编程语言,支持过程化编程、面向对象编程和泛型编程。
C++ 被认为是一种中级语言,它综合了高级语言和低级语言的特点。
C++ 是由 Bjarne Stroustrup 于 1979 年在新泽西州美利山贝尔实验室开始设计开发的。C++ 进一步扩充和完善了 C 语言,最初命名为带类的C,后来在 1983 年更名为 C++。
C++ 是 C 的一个超集,事实上,任何合法的 C 程序都是合法的 C++ 程序。
注意:使用静态类型的编程语言是在编译时执行类型检查,而不是在运行时执行类型检查。
C++ 完全支持面向对象的程序设计,包括面向对象开发的四大特性:
标准的 C++ 由三个重要部分组成:
核心语言,提供了所有构件块,包括变量、数据类型和常量,等等。
C++ 标准库,提供了大量的函数,用于操作文件、字符串等。
标准模板库(STL),提供了大量的方法,用于操作数据结构等。
ANSI 标准是为了确保 C++ 的便携性 —— 您所编写的代码在 Mac、UNIX、Windows、Alpha 计算机上都能通过编译。
由于 ANSI 标准已稳定使用了很长的时间,所有主要的 C++ 编译器的制造商都支持 ANSI 标准。
学习 C++,关键是要理解概念,而不应过于深究语言的技术细节。
学习程序设计语言的目的是为了成为一个更好的程序员,也就是说,是为了能更有效率地设计和实现新系统,以及维护旧系统。
C++ 支持多种编程风格。您可以使用 Fortran、C、Smalltalk 等任意一种语言的编程风格来编写代码。每种风格都能有效地保证运行时间效率和空间效率。
基本上每个应用程序领域的程序员都有使用 C++。
C++ 通常用于编写设备驱动程序和其他要求实时性的直接操作硬件的软件。
C++ 广泛用于教学和研究。
任何一个使用苹果电脑或 Windows PC 机的用户都在间接地使用 C++,因为这些系统的主要用户接口是使用 C++ 编写的。
发布时间文档通称备注
2015ISO/IEC TS
- 用于并行计算的扩展
2015ISO/IEC TS
- 文件系统
2014ISO/IEC
C++14 第四个C++标准
2011ISO/IEC TR
- 十进制浮点数扩展
2011ISO/IEC
C++11第三个C++标准
2010ISO/IEC TR
- 数学函数扩展
2007ISO/IEC TR
C++TR1 C++技术报告:库扩展
2006ISO/IEC TR
- C++性能技术报告
2003ISO/IEC
C++03 第二个C++标准
1998ISO/IEC
C++98 第一个C++标准
感谢您的支持,我会继续努力的!
扫码打赏,你说多少就多少
记住登录状态
重复输入密码文件是指存储在存储介质上的数据的集合。C++将文件看作是由一个一个字符(字节)的数据顺序组成的。按照文件中数据的存放形式可以将文件分为:ASCII文件和二进制文件。&把一个文本文件读入内存时,要将ASCII码转换成二进制码,而把文件以文本方式写入磁盘时,也要把二进制码转换成ASCII码,因此文本文件的读写要花费较多的转换时间。对二进制文件的读写不存在这种转换
“文件指针”是指表示读写文件的文件位置指示器。一个文件指针总是和一个文件相关联,当文件每一次打开时,文件指针都指向文件的开始,随着对文件进行操作,文件指针不断地在文件中移动,并一直指向最新处理的字符(字节)位置。
对文件的读写操作方式有两种方式:顺序文件操作和随机文件操作。程序对每一个文件都使用了一个单独的FILE结构来处理。
typedef&struct{
&&&&&&&&int&_//文件号&
&&&&&&&&int&_//缓冲区中剩余字符&
&&&&&&&&int&_//文件操作模式&
&&&&&&&&char&*_//下一个字符位置&
&&&&&&&&char&*_//文件缓冲区位置&
与文件处理相关的类及其继承关系结构图&
fp=fopen(文件名,文件的使用方式);
文件使用方式由r,w,a,t,b,+六个字符拼成
r(read): 读,用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出
w(write): 写,用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件
a(append): 追加,若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错
t(text): 文本文件,可省略不写
b(banary): 二进制文件
在打开一个文件时,如果出错,fopen将返回一个空指针值NULL。在程序中可以用这一信息来判别是否完成打开文件的工作,并作相应的处理。
if((fp=fopen(&c:\\hzk16&,&rb&)==NULL)
&&&&printf(&\nerror&on&open&c:\\hzk16&file!&);
&&&&exit(1);
fclose(文件指针);顺利关闭文件返回0,佛足额返回EOF(-1)
int&i&=&fclose(fp);
&&&&&&&cout&&&close&sucessed!!&&&
&&&&&&&cout&&&colse&failed!!&&&
顺序文件操作
1fgetc 与 fputc
fgetc函数从指定的文件中读一个字节,getchar从标准输入读一个字节,调用getchar()相当于调用fgetc(stdin)。
int fgetc(FILE *stream);
int getchar(void);
返回值:成功返回读到的字节,出错或者读到文件末尾时返回EOF
fputc函数向指定的文件写一个字节,putchar向标准输出写一个字节,调用putchar(c)相当于调用fputc(c, stdout)。
int fputc(int c, FILE *stream);
int putchar(int c);
返回值:成功返回写入的字节,出错返回EOF
#include&iostream&
using&namespace&
int&main(){
&&&&FILE&*fp=&fopen(&c:\\log.txt&,&r&);
&&&&if(fp==NULL){
&&&&&&&cout&&&can't&open&the&file&log.txt&!!&&&
&&&&&&&exit(1);
&&&&char&ch&=&fgetc(fp);
&&&&while(ch!=-1){
&&&&&&&putchar(ch);
&&&&&&&ch=fgetc(fp);
&&&&FILE&*fp1=fopen(&c:\\log.txt&,&a&);
&&&&&if(fp1==NULL){
&&&&&&&cout&&&can't&write&the&file&log.txt&!!&&&
&&&&&&&exit(1);
&&&&int&result&=&fputc('s',fp1);
&&&&if(result==-1){
&&&&&&&cout&&&can't&write&to&the&file&!&&&
&&&&}else{
&&&&&&&cout&&&write&successfully!!&&&
&&&&&//不要忘记关闭文件流&
&&&&fclose(fp);
&&&&fclose(fp1);
&&&&system(&pause&);
&&&&return&0;
2 fgets 和 fputs
fgets从指定的文件中读一行字符到调用者提供的缓冲区中,gets从标准输入读一行字符到调用者提供的缓冲区中
char *fgets(char *s, int size, FILE *stream);//参数s是缓冲区的首地址,size是缓冲区的长度,该函数从stream所指的文件中读取以'\n'结尾的一行(包括'\n'在内)存到缓冲区s中,并且在该行末尾添加一个'\0'组成完整的字符串
char *gets(char *s);
返回值:成功时s指向哪返回的指针就指向哪,出错或者读到文件末尾时返回NULL
如果文件中的一行太长,fgets从文件中读了size-1个字符还没有读到'\n',就把已经读到的size-1个字符和一个'\0'字符存入缓冲区,文件中剩下的半行可以在下次调用fgets时继续读。如果一次fgets调用在读入若干个字符后到达文件末尾,则将已读到的字符串加上'\0'存入缓冲区并返回,如果再次调用fgets则返回NULL,可以据此判断是否读到文件末尾。
fgets只适合读文本文件而不适合读二进制文件,并且文本文件中的所有字符都应该是可见字符,不能有'\0'。
int fputs(const char *s, FILE *stream);
int puts(const char *s);
返回值:成功返回一个非负整数,出错返回EOF
缓冲区s中保存的是以'\0'结尾的字符串,fputs将该字符串写入文件stream,但并不写入结尾的'\0'。与fgets不同的是,fputs并不关心的字符串中的'\n'字符,字符串中可以有'\n'也可以没有'\n'。puts将字符串s写到标准输出(不包括结尾的'\0'),然后自动写一个'\n'到标准输出
阅读排行榜

我要回帖

更多关于 c语言多文件编程 的文章

 

随机推荐