我在编一个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
小妹是初学者,跪求指点!
strcpy(StreamFileInfo.szFileTitle,dlg.GetFileName());
这里不应该用GetFileName(),它只获得文件名,不带路径。应该用GetPathName(),能够带全路径。如果你只用文件名,那么就会存储到相对路径下,就是你现在的工程路径
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。