菜鸟求救!
找个局域网文件传输的程序,但是传输过来的程序只能保存在运行程序的文件夹内。 请问 怎么样能够将传输过来的文件
写入指定的文件夹文件接收部分程序:SOCKET_STREAM_FILE_INFO StreamFileInfo;
sockClient.Receive(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));CFile destFile(StreamFileInfo.szFileTitle, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);UINT dwRead = 0;
while(dwRead<StreamFileInfo.nFileSizeLow)
{
byte* data = new byte[1024];
memset(data,0,1024);UINT dw=sockClient.Receive(data, 1024);
destFile.Write(data, dw);dwRead+=dw;
}SetFileTime((HANDLE)destFile.m_hFile,&StreamFileInfo.ftCreationTime,
&StreamFileInfo.ftLastAccessTime,&StreamFileInfo.ftLastWriteTime);
destFile.Close();
SetFileAttributes(StreamFileInfo.szFileTitle,StreamFileInfo.dwFileAttributes);
sockClient.Close();
AfxMessageBox("接收完毕!");
}
找个局域网文件传输的程序,但是传输过来的程序只能保存在运行程序的文件夹内。 请问 怎么样能够将传输过来的文件
写入指定的文件夹文件接收部分程序:SOCKET_STREAM_FILE_INFO StreamFileInfo;
sockClient.Receive(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));CFile destFile(StreamFileInfo.szFileTitle, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);UINT dwRead = 0;
while(dwRead<StreamFileInfo.nFileSizeLow)
{
byte* data = new byte[1024];
memset(data,0,1024);UINT dw=sockClient.Receive(data, 1024);
destFile.Write(data, dw);dwRead+=dw;
}SetFileTime((HANDLE)destFile.m_hFile,&StreamFileInfo.ftCreationTime,
&StreamFileInfo.ftLastAccessTime,&StreamFileInfo.ftLastWriteTime);
destFile.Close();
SetFileAttributes(StreamFileInfo.szFileTitle,StreamFileInfo.dwFileAttributes);
sockClient.Close();
AfxMessageBox("接收完毕!");
}
sockClient.Receive(&StreamFileInfo,sizeof(SOCKET_STREAM_FILE_INFO));
CString strtitle,str;
strtitle.Format(StreamFileInfo.szFileTitle);
str.Format("G:\\maindir\\cxb\\cxf\\%s",strtitle);
//CFile destFile(StreamFileInfo.szFileTitle, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary); DWORD dwAttr = GetFileAttributes("G:\\maindir\\cxb\\cxf");
if(dwAttr == 0xFFFFFFFF) //文件夹不存在
CreateDirectory("G:\\maindir\\cxb\\cxf",NULL);
CFile destFile(str, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
UINT dwRead = 0;
while(dwRead<StreamFileInfo.nFileSizeLow)
{
byte* data = new byte[1024];
memset(data,0,1024); UINT dw=sockClient.Receive(data, 1024);
destFile.Write(data, dw); dwRead+=dw;
} SetFileTime((HANDLE)destFile.m_hFile,&StreamFileInfo.ftCreationTime,
&StreamFileInfo.ftLastAccessTime,&StreamFileInfo.ftLastWriteTime);
destFile.Close();
SetFileAttributes(StreamFileInfo.szFileTitle,StreamFileInfo.dwFileAttributes);
sockClient.Close();
AfxMessageBox("接收完毕!");
}
在指定文件名为StreamFileInfo.szFileTitle的时候加上路径即可。
不清楚你的指定路径所指的意思,如果你的意思是网络传输过来的数据包指定的话,那么就要修改包的格式,比如首先是路径长度,后面跟若干字符表示指定路径,之后才是具体数据。如果是在界面上指定路径的话,就比较简单了。