程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> socket-關於 CFileDialog函數的使用問題

socket-關於 CFileDialog函數的使用問題

編輯:編程綜合問答
關於 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
小妹是初學者,跪求指點!

最佳回答:


strcpy(StreamFileInfo.szFileTitle,dlg.GetFileName());
這裡不應該用GetFileName(),它只獲得文件名,不帶路徑。應該用GetPathName(),能夠帶全路徑。如果你只用文件名,那麼就會存儲到相對路徑下,就是你現在的工程路徑

yichijingnian
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved