您好,欢迎光临本网站![请登录][注册会员]  
文件名称: 各种文件格式的传输
  所属分类: C++
  开发工具:
  文件大小: 4kb
  下载次数: 0
  上传时间: 2015-05-04
  提 供 者: daiji******
 详细说明: struct FOLDERINFO { int fileLength; //记录文件长度 char fileName[128]; //记录文件名 char filePath[512] //记录文件路径 }; 这里需要说明一下,为什么文件名,文件路径不用CString定义,原因是这个结构体我们要发给对方的,但是由于CString长度是不丁长的,导致结构体长度不能确定,从而使程序出错. 下面就是发送方的代码,我已经省去了目录选择和遍历目录的代码: void CMyQQDlg::SendFiles() { CSocket sockClient; sockClient.Create(); //创建Socket CString ip; m_You_IP.GetWindowText(ip); //m_You_IP是IP控件的变量 sockClient.Connect(ip, 11 024); // /////////////////////////////////////////////////////////////////// CString fileName; ///////////////////////这是发送方处理目录的代码,如果没有这段代码 fileName=m_fileName; //将只能发送根目录下的文件:) int a=fileName.Find(filepathone); if(a!=2) { fileName=fileName.Right(fileName.GetLength()-a-1); fileName="C:\\"+fileName; } //////////////////////////////////////////////////////////////////////////// CFile myFile; FOLDERINFO myFileInfo; if(!myFile.Open(m_fileName,CFile::modeRead|CFile::typeBinary))//m_fileName是遍历后得到的文件 return ; myFileInfo.fileLength=myFile.GetLength(); //得到文件大小 strcpy(myFileInfo.fileName,myFile.GetFileName()); //得到文件名称 strcpy(myFileInfo.filePath,m_fileName); sockClient.Send(&myFileInfo,sizeof(myFileInfo)); //发送文件信息 myFile.Seek(0,CFile::begin); char m_buf[SIZEFILE]={0}; //缓冲区 CString strError; int num=0; int temp=0; //开始发送 for(;;) { num=myFile.Read(m_buf, SIZEFILE); if(num==0) break; end=sockClient.Send(m_buf, num); temp+=end; } myFile.Close(); sockClient.Close(); return ; } 下面就是接收方的代码: int CMyQQDlg::SaveYouFiles(CSocket &recSo, SOCKADDR_IN &client) { CString fnames; CString filenamepath; static int filescount=0; CString strfileIp,strfileName,strfileLength; char filemes[512]={0};//存文件名字的 int fileLengths=0; FOLDERINFO myFileInfo; recSo.Receive(&myFileInfo,sizeof(FOLDERINFO)); fileLengths=myFileInfo.fileLength; strfileIp.Format(inet_ntoa(client.sin_addr)); strfileName.Format(myFileInfo.fileName); //得到文件名字 strfileLength.Format("%f",myFileInfo.fileLength/1024.0); filenamepath.Format(myFileInfo.filePath); //得到文件路径 int a=filenamepath.ReverseFind(_T('\\'));//这5行代码是用来得到一个例如:\AMD\Intel\ATI\ filenamepath=filenamepath.Left(a+1); //主要是用来建立目录 CString b=filenamepath; a=b.ReverseFind(_T(':')); b=b.Right(b.GetLength()-a-1); filenamepath="files"+b; //所有的文件都存在files文件夹下 CreateDirectory(filenamepath,NULL); //创建目录 strcpy(filemes,filenamepath+strfileName); char bufs[SIZEFILE]={0}; //缓冲SIZEFILE=1024 CFile fs(filemes,CFile::modeCreate|CFile::modeWrite); //存文件 int n=0; //接受的字节数 0表示结束 int temp=0; //开始接收 for(;;) { n=recSo.Receive(bufs,SIZEFILE); //接受 if(n==0) //0表示结束 break; //接受完毕 fs.Write(bufs,n); // fputs(bufs,fp); temp+=n; } fs.Close(); return 0; } ...展开收缩
(系统自动生成,下载前可以参看下载内容)

下载文件列表

相关说明

  • 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
  • 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度
  • 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
  • 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
  • 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
  • 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.
 相关搜索: 文件传输
 输入关键字,在本站1000多万海量源码库中尽情搜索: