socket-关于 CFileDialog函数的使用问题

问题描述

关于 CFileDialog函数的使用问题
我在编一个CSocket的s/c模式的简单聊天程序,其中涉及到简单文件传输
接收文件的时候用到了这个另存为的函数
代码如下
CSocket cliSock;
cliSock.Create();

if(!cliSock.Connect((LPCTSTR)m_strip1001)){    AfxMessageBox(""未发送文件!"");    return;}SOCKET_STREAM_FILE_INFO StreamFileInfo;cliSock.Receive(&StreamFileInfosizeof(SOCKET_STREAM_FILE_INFO));CString type=StreamFileInfo.szFileTitle;const   char *ty=(LPCTSTR)type;CFileDialog  dlg(falsetyty);if(IDOK!=dlg.DoModal())  return;strcpy(StreamFileInfo.szFileTitledlg.GetFileName());CFile myFile(StreamFileInfo.szFileTitle CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);AfxMessageBox(StreamFileInfo.szFileTitle);UINT nSize=0;UINT nData=0;while (nSize < StreamFileInfo.nFileSizeLow)//分段接收{    byte * szBuf=new byte[1024];    nData=cliSock.Receive(szBuf 1024);    myFile.Write(szBuf nData);    nSize+=nData;}SetFileTime((HANDLE)myFile.m_hFile/*系统文件句柄*/&StreamFileInfo.ftCreationTime/*文件创建时间*/            &StreamFileInfo.ftLastAccessTime/*文件上一次访问时间*/&StreamFileInfo.ftLastWriteTime)/*文件上一次修改时间*/;//设置文件的创建、访问、上次修改时间,myFile.Close();SetFileAttributes(StreamFileInfo.szFileTitleStreamFileInfo.dwFileAttributes);//设置文件属性cliSock.Close();AfxMessageBox(""接收完毕!"");

}

CFileDialog  dlg(FALSE NULL tyOFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY NULL);

两个问题,
第一,这个函数需要设置存储文件类型,难道我需要把所有传输文件类型都写上去么?有没有更好的办法?
第二,程序运行后接收到的文件并没有存储到另存为窗口的指定文件夹,反而存储到了我编程文件的那个文件夹下面,问题在哪里?

翻遍兜里也找不到可以悬赏的C币QAQ
小妹是初学者,跪求指点!

解决方案

strcpy(StreamFileInfo.szFileTitledlg.GetFileName());
这里不应该用GetFileName(),它只获得文件名,不带路径。应该用GetPathName(),能够带全路径。如果你只用文件名,那么就会存储到相对路径下,就是你现在的工程路径

解决方案二:
dlg.m_ofn.lpstrInitialDir = 指定初始目录
需要设置存储文件类型,这是可选的,不一定,这里的类型说的是扩展名

解决方案三:
第一个问题没看明白意思......

解决方案四:

第一,这个函数需要设置存储文件类型,难道我需要把所有传输文件类型都写上去么?有没有更好的办法?

你需要自定义协议,比如带个包头,里面是文件名(包含扩展名)和文件大小信息,接收端接收到这个包以后就知道接下来要接收的文件的名称和大小信息了。

时间: 2025-01-24 04:59:31

socket-关于 CFileDialog函数的使用问题的相关文章

请问socket中各种函数(rec,send等)功能是怎么实现的,有没有socket的源码分析一下。

问题描述 请问socket中各种函数(rec,send等)功能是怎么实现的,有没有socket的源码分析一下. 我想说的是求socket的实现,而不是利用socket去编程,求大神 解决方案 可以先了解一下winpcap编程 解决方案二: Linux TCP/IP协议栈之Socket的实现分析(一 套接字的创建) 解决方案三: 基本上都在driver里面了 你要愿意去读linux 源代码好了 解决方案四: socket的实现就很底层了,那个应该属于嵌入式驱动开发了,需要控制硬件也要开放上层软件接

php中关于socket的系列函数总结

  本文列举了所有关于PHP语言中使用socket相关服务的一些函数.注意使用如下函数之前,你需要确保你的socket已打开,如果你没有打开,请编辑你的php.ini文件,去掉下面这行前面的注释(分号): 代码如下: extension=php_sockets.dll 如果你无法去掉注释,那么请使用下面的代码来加载扩展库: 代码如下: if(!extension_loaded('sockets')){ if(strtoupper(substr(PHP_OS,3))=="WIN"){ d

php中关于socket的系列函数总结_php实例

本文列举了所有关于PHP语言中使用socket相关服务的一些函数.注意使用如下函数之前,你需要确保你的socket已打开,如果你没有打开,请编辑你的php.ini文件,去掉下面这行前面的注释(分号): 复制代码 代码如下: extension=php_sockets.dll 如果你无法去掉注释,那么请使用下面的代码来加载扩展库: 复制代码 代码如下: <?php if(!extension_loaded('sockets')){  if(strtoupper(substr(PHP_OS,3))=

socket中的函数遇见EINTR的处理【转】

转自:http://blog.chinaunix.net/uid-21501855-id-4490453.html 这几天,写服务器代码过程当中,遇见EINRT信号的问题,我是借鉴 <unp >,采用continue或者goto again循环解决的.但是感觉这个还是很有必要记录一下.网络上查找到的信息很多.下面是我查找到的和EINTR有关的介绍: 1  http://blog.csdn.net/yanook/article/details/7226019  慢系统调用函数如何处理中断信号EI

1.socket编程:socket编程,网络字节序,函数介绍,IP地址转换函数,sockaddr数据结构,网络套接字函数,socket相关函数,TCP server和client

 1  Socket编程 socket这个词可以表示很多概念: 在TCP/IP协议中,"IP地址+TCP或UDP端口号"唯一标识网络通讯中的一个进程,"IP 地址+端口号"就称为socket. 在TCP协议中,建立连接的两个进程各自有一个socket来标识,那么这两个socket组成的socket pair就唯一标识一个连接.socket本身有"插座"的意思,因此用来描述网络连 接的一对一关系. TCP/IP协议最早在BSD UNIX上实现,

C语言中socket相关网络编程函数小结_C 语言

C语言socket()函数:建立一个socket通信头文件: #include <sys/types.h> #include <sys/socket.h> 定义函数: int socket(int domain, int type, int protocol); 函数说明:socket()用来建立一个新的socket, 也就是向系统注册, 通知系统建立一通信端口. 参数domain 指定使用何种的地址类型, 完整的定义在/usr/include/bits/socket.h 内, 底

Linux下socket编程,附带tcp例子

1.网络中进程之间如何通信? 本地的进程间通信(IPC)有很多种方式,但可以总结为下面4类: 消息传递(管道.FIFO.消息队列) 同步(互斥量.条件变量.读写锁.文件和写记录锁.信号量) 共享内存(匿名的和具名的) 远程过程调用(Solaris门和Sun RPC) 但这些都不是本文的主题!我们要讨论的是网络中进程之间如何通信?首要解决的问题是如何唯一标识一个进程,否则通信无从谈起!在本地可以通过进程PID来唯一标识一个进程,但是在网络中这是行不通的.其实TCP/IP协议族已经帮我们解决了这个问

PHP Socket 编程

 socket  Socket协议的形象描述       1.一个是发动机(Socket),提供了网络通信的能力               一个是轿车(Http),提供了具体的方式   2.socket的英文原义是"孔"或"插座".在这里作为4BDS UNIX的进程通信机制,取后一种意义.socket非常类似于电话插座.以一个国家级电话网为例.电话的通话双方相当于相互通信的2个进程,区号是它的网络地址:区内一个单位的交换机相当于一台主机,主机分配给每个用户的局内号

请教如何改善C#中socket通信机客户端程序的健壮性

程序|客户端   我是做Socket的新手,最近做了一个Socket客户端程序,连接Server的时候,如果server存在,并且允许连接的话,程序无错,正常执行:但是如果Server不存在,或者拒绝连接,程序就会卡住,此时不提示出错.开始我以为是没有Catch异常,但是检查了程序,异常情况都Catch掉了,程序还是卡. 请各位大虾帮忙指正!谢谢,以下是我这个模块的代码! using System;using System.Collections;using System.ComponentMo