yichijingnian
2015-06-10 14:54
采纳率: 50%
浏览 1.7k

关于 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(),能够带全路径。如果你只用文件名,那么就会存储到相对路径下,就是你现在的工程路径

    已采纳该答案
    评论
    解决 无用
    打赏 举报
  • threenewbee 2015-06-10 14:58

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

    评论
    解决 无用
    打赏 举报
  • 快乐鹦鹉 2015-06-11 00:13

    第一个问题没看明白意思......

    评论
    解决 无用
    打赏 举报
  • Eleven 2015-06-11 02:30

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

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

    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题