开发者社区> 问答> 正文

关于 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
小妹是初学者,跪求指点!

展开
收起
a123456678 2016-03-06 13:28:24 2138 0
1 条回答
写回答
取消 提交回答
  • strcpy(StreamFileInfo.szFileTitle,dlg.GetFileName());
    这里不应该用GetFileName(),它只获得文件名,不带路径。应该用GetPathName(),能够带全路径。如果你只用文件名,那么就会存储到相对路径下,就是你现在的工程路径

    2019-07-17 18:54:27
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载