yichijingnian 2015-06-10 14:54 采纳率: 50%
浏览 1692
已采纳

关于 CFileDialog函数的使用问题

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

if(!cliSock.Connect((LPCTSTR)m_strip,1001))
{
    AfxMessageBox("未发送文件!");
    return;
}

SOCKET_STREAM_FILE_INFO StreamFileInfo;
cliSock.Receive(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));

CString type=StreamFileInfo.szFileTitle;
const   char *ty=(LPCTSTR)type;
CFileDialog  dlg(false,ty,ty);
if(IDOK!=dlg.DoModal())  return;

strcpy(StreamFileInfo.szFileTitle,dlg.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.szFileTitle,StreamFileInfo.dwFileAttributes);//设置文件属性
cliSock.Close();
AfxMessageBox("接收完毕!");

}

CFileDialog  dlg(FALSE, NULL, ty,OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_HIDEREADONLY, NULL);

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

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

  • 写回答

4条回答 默认 最新

  • 快乐鹦鹉 2015-06-11 00:11
    关注

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作