怎么复制文件

时间:2022-06-01 20:15:31
我现在得到一个文件的路径,想把该文件复制到另一个目录下,请问该如何操作

谢谢

23 个解决方案

#1


CopyFile

#2


CopyFile()

#3


拷贝前确认目标目录存在,不存在先CreateDirectory创建目录

#4


http://msdn.microsoft.com/en-us/library/aa363851(VS.85).aspx

#5


CopyFile(
  LPCTSTR lpExistingFileName, // name of an existing file
  LPCTSTR lpNewFileName,      // name of new file
  BOOL bFailIfExists
)
第一个参数:源文件的路径
第二个参数:目标路径
第三个参数:true的作用是目标路径下有想拷贝的文件则操作失败,flase则相反 

#6


引用 5 楼 zhuzhu3192003 的回复:
CopyFile( 
  LPCTSTR lpExistingFileName, // name of an existing file 
  LPCTSTR lpNewFileName,      // name of new file 
  BOOL bFailIfExists 

第一个参数:源文件的路径 
第二个参数:目标路径 
第三个参数:true的作用是目标路径下有想拷贝的文件则操作失败,flase则相反 


在新目录下需要指定文件名吗?
我怎么没成功的啊
fileName=FileDlg.GetPathName();
fileName.Replace("\\","\\\\");
CString str=m_Path+_T("\\\\");  //m_Path为目录
str.Replace("\\\\","\\");   //注释掉也没用
CopyFile(fileName,str,TRUE);

#7


把硬盘拆下来,放火上烧烧,等烧红了,在放到水里,听到"兹拉"一声,就可以拿出来,接上数据线和电源线,就可以看到文件拷贝过来了

#8


[code=C/C++]/*
fileName.Replace("\\","\\\\"); 
CString str=m_Path+_T("\\\\");  //m_Path为目录 
str.Replace("\\\\","\\");  //注释掉也没用 
*/
//这段代码在干吗?


CopyFile(fileName, newFileName, FALSE);
//源文件名:fileName, 目标文件名:newFileName, 目标文件已经存在则覆盖:FALSE[/code]

#9



BOOL CopyFile(LPCTSTR pSrc, LPCTSTR pDst)
{
// 功能:文件复制,如果目的文件存在则覆盖目的文件,可包括目录信息,会自动建立所需的目录 

try
{
TCHAR szSrc[MAX_PATH];
memset(szSrc, 0, MAX_PATH);

TCHAR szDst[MAX_PATH];
memset(szDst, 0, MAX_PATH);

lstrcpyn(szSrc, pSrc, MAX_PATH);
lstrcpyn(szDst, pDst, MAX_PATH);

SHFILEOPSTRUCT shFileOp;
memset(&shFileOp, 0, sizeof(SHFILEOPSTRUCT));

shFileOp.hwnd = NULL;
shFileOp.wFunc = FO_COPY;
shFileOp.pFrom = szSrc;
shFileOp.pTo = szDst;
shFileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;

int iRet = SHFileOperation(&shFileOp);

if(iRet != 0)
{
return FALSE;
}
}
catch (...) 
{

return FALSE;
}

return TRUE;
}

#10


BOOL a=CopyFile(_T("D:\\l32.dll"),_T("E:\\"),false);

无法复制啊,郁闷

BOOL a=CopyFile(_T("D:\l32.dll"),_T("E:\"),false);这样是出错的啊

#11


BOOL a=CopyFile(_T("D:\\l32.dll"),_T("E:\\123.dll"),false); 
天啦,文件名都没有,你复制什么啊

#12


本帖最后由 greatws 于 2008-11-14 13:17:36 编辑
我比较懒,一般直接DOS命令

WinExec(_T("copy d:\\123.dll e:\\", SW_HIDE);

#13


11楼ok

#14


引用 11 楼 yayafu 的回复:
BOOL a=CopyFile(_T("D:\\l32.dll"),_T("E:\\123.dll"),false); 
天啦,文件名都没有,你复制什么啊 


fileName=FileDlg.GetPathName(); 
fileName.Replace("\\","\\\\"); 
CString str=m_Path+_T("\\\\123.xml");  //m_Path为目录 
str.Replace("\\\\","\\");  //注释掉也没用 
CopyFile(fileName,str,false);

我这样的不可以的啊

#15


引用 14 楼 dream_ice 的回复:
引用 11 楼 yayafu 的回复:
fileName=FileDlg.GetPathName(); 
fileName.Replace("\\","\\\\"); 
CString str=m_Path+_T("\\\\123.xml");  //m_Path为目录 
str.Replace("\\\\","\\");  //注释掉也没用 
CopyFile(fileName,str,false); 
我这样的不可以的啊


CopyFile( 
  LPCTSTR lpExistingFileName, // 看清楚参数类型,不能用CString,强制转换下
  LPCTSTR lpNewFileName,      // 看清楚参数类型,不能用CString,强制转换下
  BOOL bFailIfExists 

#16


呵呵,不好意思,我看错了楼主的意思,以为是复制文件夹,所以从自己的代码里马上就抽出来给你了,希望不要误导。
复制单个文件的话,那就不用那么复杂了,楼上几位说的都可以的。

#17


引用 15 楼 lsldd 的回复:
引用 14 楼 dream_ice 的回复:
引用 11 楼 yayafu 的回复: 
fileName=FileDlg.GetPathName(); 
fileName.Replace("\\","\\\\"); 
CString str=m_Path+_T("\\\\123.xml");  //m_Path为目录 
str.Replace("\\\\","\\");  //注释掉也没用 
CopyFile(fileName,str,false); 
我这样的不可以的啊 
 

CopyFile( 
  LPCTSTR lpExistingFileName, // 看清楚参数类型,不能用CString,强制转换下 
  LPCTSTR lpNewFileName,  …


不行的

#18


BOOL a=CopyFile(_T("D:\\l32.dll"),_T("E:\\"),false); 
//文件名在哪里?
BOOL a = CopyFile(_T(“D:\\132.dll"), _T("E:\\132.dll", FALSE);

#19


引用 18 楼 lfchen 的回复:
BOOL a=CopyFile(_T("D:\\l32.dll"),_T("E:\\"),false); 
//文件名在哪里? 
BOOL a = CopyFile(_T(“D:\\132.dll"), _T("E:\\132.dll", FALSE);


是我为了简单写丢了
现在我发现复制不了,是因为目的不能用相对路径的(我的目录是从对话框发消息接受的,我在主框上操作的)

现在很是不知道怎么将相对路径转为绝对路径的 

#20


现在我发现复制不了,是因为目的不能用相对路径的(我的目录是从对话框发消息接受的,我在主框上操作的) 
//两个文件路径名都是可以用相对路径的。
//是不是相对路径获取的不正确?

#21


引用 20 楼 lfchen 的回复:
现在我发现复制不了,是因为目的不能用相对路径的(我的目录是从对话框发消息接受的,我在主框上操作的) 
//两个文件路径名都是可以用相对路径的。 
//是不是相对路径获取的不正确?


应该是正确的,因为在对话框里我获得后在下面新建了个目录,成功
再传到主框架,当前目录居然变成了复制文件的所在位置,所以整个目录都找不到了

#22


GetLastError()什么错?

#23


引用 21 楼 dream_ice 的回复:
再传到主框架,当前目录居然变成了复制文件的所在位置,所以整个目录都找不到了


你的相对路径是相对执行文件的?
那么
GetModulePath()后再SetCurrentDirectory(),设回当前目录就可以了。

#1


CopyFile

#2


CopyFile()

#3


拷贝前确认目标目录存在,不存在先CreateDirectory创建目录

#4


http://msdn.microsoft.com/en-us/library/aa363851(VS.85).aspx

#5


CopyFile(
  LPCTSTR lpExistingFileName, // name of an existing file
  LPCTSTR lpNewFileName,      // name of new file
  BOOL bFailIfExists
)
第一个参数:源文件的路径
第二个参数:目标路径
第三个参数:true的作用是目标路径下有想拷贝的文件则操作失败,flase则相反 

#6


引用 5 楼 zhuzhu3192003 的回复:
CopyFile( 
  LPCTSTR lpExistingFileName, // name of an existing file 
  LPCTSTR lpNewFileName,      // name of new file 
  BOOL bFailIfExists 

第一个参数:源文件的路径 
第二个参数:目标路径 
第三个参数:true的作用是目标路径下有想拷贝的文件则操作失败,flase则相反 


在新目录下需要指定文件名吗?
我怎么没成功的啊
fileName=FileDlg.GetPathName();
fileName.Replace("\\","\\\\");
CString str=m_Path+_T("\\\\");  //m_Path为目录
str.Replace("\\\\","\\");   //注释掉也没用
CopyFile(fileName,str,TRUE);

#7


把硬盘拆下来,放火上烧烧,等烧红了,在放到水里,听到"兹拉"一声,就可以拿出来,接上数据线和电源线,就可以看到文件拷贝过来了

#8


[code=C/C++]/*
fileName.Replace("\\","\\\\"); 
CString str=m_Path+_T("\\\\");  //m_Path为目录 
str.Replace("\\\\","\\");  //注释掉也没用 
*/
//这段代码在干吗?


CopyFile(fileName, newFileName, FALSE);
//源文件名:fileName, 目标文件名:newFileName, 目标文件已经存在则覆盖:FALSE[/code]

#9



BOOL CopyFile(LPCTSTR pSrc, LPCTSTR pDst)
{
// 功能:文件复制,如果目的文件存在则覆盖目的文件,可包括目录信息,会自动建立所需的目录 

try
{
TCHAR szSrc[MAX_PATH];
memset(szSrc, 0, MAX_PATH);

TCHAR szDst[MAX_PATH];
memset(szDst, 0, MAX_PATH);

lstrcpyn(szSrc, pSrc, MAX_PATH);
lstrcpyn(szDst, pDst, MAX_PATH);

SHFILEOPSTRUCT shFileOp;
memset(&shFileOp, 0, sizeof(SHFILEOPSTRUCT));

shFileOp.hwnd = NULL;
shFileOp.wFunc = FO_COPY;
shFileOp.pFrom = szSrc;
shFileOp.pTo = szDst;
shFileOp.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR;

int iRet = SHFileOperation(&shFileOp);

if(iRet != 0)
{
return FALSE;
}
}
catch (...) 
{

return FALSE;
}

return TRUE;
}

#10


BOOL a=CopyFile(_T("D:\\l32.dll"),_T("E:\\"),false);

无法复制啊,郁闷

BOOL a=CopyFile(_T("D:\l32.dll"),_T("E:\"),false);这样是出错的啊

#11


BOOL a=CopyFile(_T("D:\\l32.dll"),_T("E:\\123.dll"),false); 
天啦,文件名都没有,你复制什么啊

#12


本帖最后由 greatws 于 2008-11-14 13:17:36 编辑
我比较懒,一般直接DOS命令

WinExec(_T("copy d:\\123.dll e:\\", SW_HIDE);

#13


11楼ok

#14


引用 11 楼 yayafu 的回复:
BOOL a=CopyFile(_T("D:\\l32.dll"),_T("E:\\123.dll"),false); 
天啦,文件名都没有,你复制什么啊 


fileName=FileDlg.GetPathName(); 
fileName.Replace("\\","\\\\"); 
CString str=m_Path+_T("\\\\123.xml");  //m_Path为目录 
str.Replace("\\\\","\\");  //注释掉也没用 
CopyFile(fileName,str,false);

我这样的不可以的啊

#15


引用 14 楼 dream_ice 的回复:
引用 11 楼 yayafu 的回复:
fileName=FileDlg.GetPathName(); 
fileName.Replace("\\","\\\\"); 
CString str=m_Path+_T("\\\\123.xml");  //m_Path为目录 
str.Replace("\\\\","\\");  //注释掉也没用 
CopyFile(fileName,str,false); 
我这样的不可以的啊


CopyFile( 
  LPCTSTR lpExistingFileName, // 看清楚参数类型,不能用CString,强制转换下
  LPCTSTR lpNewFileName,      // 看清楚参数类型,不能用CString,强制转换下
  BOOL bFailIfExists 

#16


呵呵,不好意思,我看错了楼主的意思,以为是复制文件夹,所以从自己的代码里马上就抽出来给你了,希望不要误导。
复制单个文件的话,那就不用那么复杂了,楼上几位说的都可以的。

#17


引用 15 楼 lsldd 的回复:
引用 14 楼 dream_ice 的回复:
引用 11 楼 yayafu 的回复: 
fileName=FileDlg.GetPathName(); 
fileName.Replace("\\","\\\\"); 
CString str=m_Path+_T("\\\\123.xml");  //m_Path为目录 
str.Replace("\\\\","\\");  //注释掉也没用 
CopyFile(fileName,str,false); 
我这样的不可以的啊 
 

CopyFile( 
  LPCTSTR lpExistingFileName, // 看清楚参数类型,不能用CString,强制转换下 
  LPCTSTR lpNewFileName,  …


不行的

#18


BOOL a=CopyFile(_T("D:\\l32.dll"),_T("E:\\"),false); 
//文件名在哪里?
BOOL a = CopyFile(_T(“D:\\132.dll"), _T("E:\\132.dll", FALSE);

#19


引用 18 楼 lfchen 的回复:
BOOL a=CopyFile(_T("D:\\l32.dll"),_T("E:\\"),false); 
//文件名在哪里? 
BOOL a = CopyFile(_T(“D:\\132.dll"), _T("E:\\132.dll", FALSE);


是我为了简单写丢了
现在我发现复制不了,是因为目的不能用相对路径的(我的目录是从对话框发消息接受的,我在主框上操作的)

现在很是不知道怎么将相对路径转为绝对路径的 

#20


现在我发现复制不了,是因为目的不能用相对路径的(我的目录是从对话框发消息接受的,我在主框上操作的) 
//两个文件路径名都是可以用相对路径的。
//是不是相对路径获取的不正确?

#21


引用 20 楼 lfchen 的回复:
现在我发现复制不了,是因为目的不能用相对路径的(我的目录是从对话框发消息接受的,我在主框上操作的) 
//两个文件路径名都是可以用相对路径的。 
//是不是相对路径获取的不正确?


应该是正确的,因为在对话框里我获得后在下面新建了个目录,成功
再传到主框架,当前目录居然变成了复制文件的所在位置,所以整个目录都找不到了

#22


GetLastError()什么错?

#23


引用 21 楼 dream_ice 的回复:
再传到主框架,当前目录居然变成了复制文件的所在位置,所以整个目录都找不到了


你的相对路径是相对执行文件的?
那么
GetModulePath()后再SetCurrentDirectory(),设回当前目录就可以了。