CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

请教大家文件流编程

楼主youyingbo()2006-03-07 10:23:18 在 VC/MFC / 基础类 提问

我现在作一个给服务器上传文件流和下载的程序,我对文件流不太了解,想问一下大家。  
  另外,怎么读取文件流,怎么存储它,都用什么函数?有这方面的资料也可以,谢谢大家 问题点数:100、回复次数:9Top

1 楼Atomictry(天影)回复于 2006-03-07 10:34:58 得分 5

可以通过ftp、tcp/ip来传。Top

2 楼youyingbo()回复于 2006-03-07 10:39:20 得分 0

这个我知道,我可以用socket传输一些字符串,但不知道文件流是怎么回事,用什么方式传输Top

3 楼youyingbo()回复于 2006-03-07 14:46:44 得分 0

顶下,100分啊,没人知道吗  
   
  我用函数fread(void   *ptr,   size_t   size,   size_t   nmemb,   FILE*   stream)来读一个字符文件,其中size是读多少,但我不知道一个字符文件有多少字符,如果我想把这个文件完整的读下来,该怎么办?  
  不可能设一个很大的值读取吧?  
  Top

4 楼sunj_study()回复于 2006-03-07 15:24:00 得分 5

先获取整个文件的大小nLength。size随便定义多大,把每次读到的长度累加起来total,当nLength-total   <   size时,再读一次就读完文件了。Top

5 楼arrow8209(arrow)回复于 2006-03-07 15:24:08 得分 5

我以前写过现在忘了。你可以到网络上找找,好像有这方面的代码Top

6 楼modena(非云)回复于 2006-03-07 15:34:37 得分 43

首先明确流的概念,我的接触中遇到两种流:媒体流和字节流  
  媒体流侧重于带有时间节的采样报文  
  字节流侧重于相同时间内有相同大小的数据,在网络上被处理成流量控制  
   
  现在来看文件,文件的读写操作简单,打开文件的句柄后指定长度读,大文件获取文件总长度后分块读,小文件一次性读入内存  
   
  最后,我们来说文件流的实现.  
  牵涉到流,那么不可避免的需要处理缓冲区,以多线程控制良好的缓冲机制,处理好客户/服务两端的时间差/请求与休整/同步处理/流控处理,才能够真正的实现所谓的流式传输  
  正常的做法是读数据在缓冲区有空位时抛入缓冲区,线程读取缓冲区数据Top

7 楼modena(非云)回复于 2006-03-07 15:37:33 得分 0

向网络上发送,客户端接收数据后写入文件  
   
  如果不需要考虑多个文件同时下载,可以不考虑流控和数据报文分片Top

8 楼xx_jj()回复于 2006-03-07 16:09:47 得分 42

给你点代码  
   
  //发送文件线程  
  UINT   _SendFileThread(LPVOID   lparam)  
  {  
   
  CMyQQDlg   *pDlg=(CMyQQDlg   *)lparam;  
  if(pDlg->StopServer==true) return   -1;  
   
  CSocket   sockClient;  
  sockClient.Create();  
  CString   ip;  
  pDlg->m_You_IP.GetWindowText(ip);  
  sockClient.Connect(ip,   PORT+pDlg->m_client);    
  //首先发送标记F为文件,2  
  int   end=0;  
  end=sockClient.Send("F",FLAG);  
  ///////////////////////////////////////////////////////////////////发送标志是否成功  
  if(end==SOCKET_ERROR)  
  {  
  AfxMessageBox("_SendFileThread   Send错误!"+pDlg->GetError(GetLastError()));  
  return   -1;  
  }  
   
  else   if(end!=2)    
  {  
  AfxMessageBox("文件头错误");  
  return   -1;  
  }  
  ///////////////////////////////////////////////////////////////////  
  CFile   myFile;  
  FILEINFO   myFileInfo;  
  if(!myFile.Open(pDlg->m_fileName,   CFile::modeRead   |   CFile::typeBinary))  
  return   -1;  
  myFileInfo.fileLength=myFile.GetLength(); //得到文件大小  
  strcpy(myFileInfo.fileName,myFile.GetFileName());//得到文件名称  
   
  sockClient.Send(&myFileInfo,sizeof(myFileInfo)); //发送文件信息  
   
  pDlg->m_Progress.SetRange32(0,myFileInfo.fileLength);  
   
  myFile.Seek(0,CFile::begin);  
  char   m_buf[SIZEFILE]={0};  
  CString   strError;  
  int   num=0;  
  end=0;  
  int   temp=0;  
  pDlg->GetDlgItem(IDC_BUTTON_STOP_FILE)->EnableWindow(true);  
   
  for(;;)  
  {  
  if(pDlg->FileWork==false)  
  {  
  pDlg->FileWork=true;  
  pDlg->GetDlgItem(IDCANCEL)->EnableWindow(false);  
  pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(false);  
  }  
  num=myFile.Read(m_buf,   SIZEFILE);  
  if(num==0)   break;  
  end=sockClient.Send(m_buf,   num);    
  temp+=end;  
  pDlg->m_Progress.SetPos(temp);  
  if(pDlg->FileStop==true)    
  {  
  pDlg->FileStop=false;  
  pDlg->FileWork=false;  
  break;  
  }  
   
  if(end==SOCKET_ERROR)  
  {  
  AfxMessageBox("_SendFileThread   Send错误!"+pDlg->GetError(GetLastError()));  
  break;  
   
  }  
  }  
  pDlg->m_Progress.SetPos(0);  
  CString   strLocalName;  
  pDlg->GetLocalHostName(strLocalName);  
  CString   strLocalIP;  
  pDlg->GetIpAddress(strLocalName,strLocalIP);  
  if(temp==myFileInfo.fileLength)  
  pDlg->AddMsgList(strLocalIP+"->"+strLocalName,"文件发送成功");  
  else    
  pDlg->AddMsgList(strLocalIP+"->"+strLocalName,"文件发送失败");  
  myFile.Close();  
  sockClient.Close();  
  pDlg->FileWork=false;  
  pDlg->GetDlgItem(IDC_PROGRESS_SEND_FILE)->ShowWindow(SW_HIDE);  
  pDlg->GetDlgItem(IDC_BUTTON_STOP_FILE)->EnableWindow(false);  
   
  pDlg->GetDlgItem(IDCANCEL)->EnableWindow(true);  
  pDlg->GetDlgItem(IDC_BUTTON_DISCONNECT)->EnableWindow(true);  
   
  return   0;  
  }Top

9 楼youyingbo()回复于 2006-03-08 13:05:36 得分 0

载顶下看看Top

相关问题

  • 关于多文件编程
  • 编程控制PDF文件
  • 如何编程播放vox文件
  • VB编程修改EXCEL文件
  • 关于ASF文件的编程!
  • SDK编程中的rc文件?
  • c语言文件编程问题
  • INI文件的编程高手请进
  • 有人精通AVI文件编程吗?
  • freebsd编程的头文件问题

关键词

  • 文件
  • 字符
  • ip
  • myfileinfo
  • pdlg
  • sockclient
  • myfile
  • cfile
  • 知道
  • 发送

得分解答快速导航

  • 帖主:youyingbo
  • Atomictry
  • sunj_study
  • arrow8209
  • modena
  • xx_jj

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo