② fileParam.lpNewFileName="d:\\Asset\\123.mpg";
我用②的时候是正确的,用①就不能完成copy,为啥呢
20 个解决方案
#1
oDlg.GetFileName()返回值为123.mpg
#2
lpNewFileName只是放的指针,没有复制内容
"d:\\Asset\\"+oDlg.GetFileName()的结果是个临时变量,执行完毕就释放了。
因此lpNewFileName等你用的时候就不知道指到什么地方去了
"d:\\Asset\\"+oDlg.GetFileName()的结果是个临时变量,执行完毕就释放了。
因此lpNewFileName等你用的时候就不知道指到什么地方去了
#3
那应该怎么改呢
#4
CString strFileName;
strFileName.Format(TEXT("d:\\Asset\\%s"),oDlg.GetFileName());
fileParam.lpNewFileName=strFileName;
前提是fileParam.lpNewFileName必须在strFileName被释放前使用,否则lpNewFileName又变成野指针了。
顺便问一下,fileParam是什么对象?
可不可以把char *lpNewFileName改成 char lpNewFileName[MAX_PATH]?
可以改的话就简单了:
strcpy(fileParam.lpNewFileName,"d:\\Asset\\"+oDlg.GetFileName());
strFileName.Format(TEXT("d:\\Asset\\%s"),oDlg.GetFileName());
fileParam.lpNewFileName=strFileName;
前提是fileParam.lpNewFileName必须在strFileName被释放前使用,否则lpNewFileName又变成野指针了。
顺便问一下,fileParam是什么对象?
可不可以把char *lpNewFileName改成 char lpNewFileName[MAX_PATH]?
可以改的话就简单了:
strcpy(fileParam.lpNewFileName,"d:\\Asset\\"+oDlg.GetFileName());
#5
fileParam是我定义的一个结构体,该结构体包含源文件路径和目的文件路径
#6
CFileDialog oDlg(TRUE,
_T("MPG file (*.mpg)"),
0,
OFN_HIDEREADONLY,
_T("文件类型 (*.mpg)|*.mpg||"),
0);
if(IDOK==oDlg.DoModal())
{
m_bTransport=false;
SetDlgItemText(IDC_INPUT_ASSET_BUTTON2,"取消");
//拷贝文件线程,拷贝完后button设为"导入",传递一个结构体
FILEPARAM* fileParam;
fileParam->lpNewFileName="d:\\Asset\\"+oDlg.GetFileName();
HANDLE hThread=AfxBeginThread(CopyFileThread,(LPVOID*)fileParam);}
这是我全部代码。
_T("MPG file (*.mpg)"),
0,
OFN_HIDEREADONLY,
_T("文件类型 (*.mpg)|*.mpg||"),
0);
if(IDOK==oDlg.DoModal())
{
m_bTransport=false;
SetDlgItemText(IDC_INPUT_ASSET_BUTTON2,"取消");
//拷贝文件线程,拷贝完后button设为"导入",传递一个结构体
FILEPARAM* fileParam;
fileParam->lpNewFileName="d:\\Asset\\"+oDlg.GetFileName();
HANDLE hThread=AfxBeginThread(CopyFileThread,(LPVOID*)fileParam);}
这是我全部代码。
#7
那就把char *lpNewFileName改成 char lpNewFileName[MAX_PATH]
赋值的时候:
strcpy(fileParam.lpNewFileName,"d:\\Asset\\"+oDlg.GetFileName());
赋值的时候:
strcpy(fileParam.lpNewFileName,"d:\\Asset\\"+oDlg.GetFileName());
#8
漏了一句。
fileParam->lpExistingFileName=oDlg.GetPathName();
fileParam->lpExistingFileName=oDlg.GetPathName();
#9
这一句应该也不行吧
原因与lpNewFileName一样
原因与lpNewFileName一样
#10
恩。是的。兄台,你说的我道理我懂了,代码还是不会。。。
#11
多多动手练习,每个人都是从不会开始的
#12
error C2664: 'strcpy' : cannot convert parameter 1 from 'LPCTSTR' to 'char *'
#13
FILEPARAM的定义贴出来看看
#14
struct FILEPARAM
{
CString lpExistingFileName;
char lpNewFileName[MAX_PATH];//这是根据你的改的
// CString lpNewFileName;//这是原来我定义的
};
{
CString lpExistingFileName;
char lpNewFileName[MAX_PATH];//这是根据你的改的
// CString lpNewFileName;//这是原来我定义的
};
#15
fileParam->lpNewFileName=strFileName;就报这个错了
error C2440: '=' : cannot convert from 'CString' to 'char [260]'
error C2440: '=' : cannot convert from 'CString' to 'char [260]'
#16
struct FILEPARAM
{
CString lpExistingFileName;
CString lpNewFileName;//这是原来我定义的
};
你原来把lpNewFileName定义成CString类型,那你原来的赋值方法应该没问题啊,我看到有个lp还以为是个指针。
FILEPARAM* fileParam;//没初始化?比如FILEPARAM* fileParam=new FILEPARAM;
fileParam->lpNewFileName="d:\\Asset\\"+oDlg.GetFileName();
{
CString lpExistingFileName;
CString lpNewFileName;//这是原来我定义的
};
你原来把lpNewFileName定义成CString类型,那你原来的赋值方法应该没问题啊,我看到有个lp还以为是个指针。
FILEPARAM* fileParam;//没初始化?比如FILEPARAM* fileParam=new FILEPARAM;
fileParam->lpNewFileName="d:\\Asset\\"+oDlg.GetFileName();
#17
谢谢兄台。确实是没初始化。。
#18
确实是没初始化,可是为什么用②的时候不用初始化呢
#19
fileParam刚刚定义的时候是个随机指针,所以fileParam->lpNewFileName也是个随机指针,只是这个指针指向的地址是不确定的。
fileParam.lpNewFileName="d:\\Asset\\123.mpg";//把一个常量字符串指针赋给lpNewFileName,所以可以用,但是说不定什么时候lpNewFileName就被修改了。
fileParam.lpNewFileName="d:\\Asset\\"+oDlg.GetFileName();//赋值结果指向一个临时CString变量,这个变量一释放字符串内容就没了。
fileParam.lpNewFileName="d:\\Asset\\123.mpg";//把一个常量字符串指针赋给lpNewFileName,所以可以用,但是说不定什么时候lpNewFileName就被修改了。
fileParam.lpNewFileName="d:\\Asset\\"+oDlg.GetFileName();//赋值结果指向一个临时CString变量,这个变量一释放字符串内容就没了。
#20
恩。谢谢兄台。明白了
#21
#1
oDlg.GetFileName()返回值为123.mpg
#2
lpNewFileName只是放的指针,没有复制内容
"d:\\Asset\\"+oDlg.GetFileName()的结果是个临时变量,执行完毕就释放了。
因此lpNewFileName等你用的时候就不知道指到什么地方去了
"d:\\Asset\\"+oDlg.GetFileName()的结果是个临时变量,执行完毕就释放了。
因此lpNewFileName等你用的时候就不知道指到什么地方去了
#3
那应该怎么改呢
#4
CString strFileName;
strFileName.Format(TEXT("d:\\Asset\\%s"),oDlg.GetFileName());
fileParam.lpNewFileName=strFileName;
前提是fileParam.lpNewFileName必须在strFileName被释放前使用,否则lpNewFileName又变成野指针了。
顺便问一下,fileParam是什么对象?
可不可以把char *lpNewFileName改成 char lpNewFileName[MAX_PATH]?
可以改的话就简单了:
strcpy(fileParam.lpNewFileName,"d:\\Asset\\"+oDlg.GetFileName());
strFileName.Format(TEXT("d:\\Asset\\%s"),oDlg.GetFileName());
fileParam.lpNewFileName=strFileName;
前提是fileParam.lpNewFileName必须在strFileName被释放前使用,否则lpNewFileName又变成野指针了。
顺便问一下,fileParam是什么对象?
可不可以把char *lpNewFileName改成 char lpNewFileName[MAX_PATH]?
可以改的话就简单了:
strcpy(fileParam.lpNewFileName,"d:\\Asset\\"+oDlg.GetFileName());
#5
fileParam是我定义的一个结构体,该结构体包含源文件路径和目的文件路径
#6
CFileDialog oDlg(TRUE,
_T("MPG file (*.mpg)"),
0,
OFN_HIDEREADONLY,
_T("文件类型 (*.mpg)|*.mpg||"),
0);
if(IDOK==oDlg.DoModal())
{
m_bTransport=false;
SetDlgItemText(IDC_INPUT_ASSET_BUTTON2,"取消");
//拷贝文件线程,拷贝完后button设为"导入",传递一个结构体
FILEPARAM* fileParam;
fileParam->lpNewFileName="d:\\Asset\\"+oDlg.GetFileName();
HANDLE hThread=AfxBeginThread(CopyFileThread,(LPVOID*)fileParam);}
这是我全部代码。
_T("MPG file (*.mpg)"),
0,
OFN_HIDEREADONLY,
_T("文件类型 (*.mpg)|*.mpg||"),
0);
if(IDOK==oDlg.DoModal())
{
m_bTransport=false;
SetDlgItemText(IDC_INPUT_ASSET_BUTTON2,"取消");
//拷贝文件线程,拷贝完后button设为"导入",传递一个结构体
FILEPARAM* fileParam;
fileParam->lpNewFileName="d:\\Asset\\"+oDlg.GetFileName();
HANDLE hThread=AfxBeginThread(CopyFileThread,(LPVOID*)fileParam);}
这是我全部代码。
#7
那就把char *lpNewFileName改成 char lpNewFileName[MAX_PATH]
赋值的时候:
strcpy(fileParam.lpNewFileName,"d:\\Asset\\"+oDlg.GetFileName());
赋值的时候:
strcpy(fileParam.lpNewFileName,"d:\\Asset\\"+oDlg.GetFileName());
#8
漏了一句。
fileParam->lpExistingFileName=oDlg.GetPathName();
fileParam->lpExistingFileName=oDlg.GetPathName();
#9
这一句应该也不行吧
原因与lpNewFileName一样
原因与lpNewFileName一样
#10
恩。是的。兄台,你说的我道理我懂了,代码还是不会。。。
#11
多多动手练习,每个人都是从不会开始的
#12
error C2664: 'strcpy' : cannot convert parameter 1 from 'LPCTSTR' to 'char *'
#13
FILEPARAM的定义贴出来看看
#14
struct FILEPARAM
{
CString lpExistingFileName;
char lpNewFileName[MAX_PATH];//这是根据你的改的
// CString lpNewFileName;//这是原来我定义的
};
{
CString lpExistingFileName;
char lpNewFileName[MAX_PATH];//这是根据你的改的
// CString lpNewFileName;//这是原来我定义的
};
#15
fileParam->lpNewFileName=strFileName;就报这个错了
error C2440: '=' : cannot convert from 'CString' to 'char [260]'
error C2440: '=' : cannot convert from 'CString' to 'char [260]'
#16
struct FILEPARAM
{
CString lpExistingFileName;
CString lpNewFileName;//这是原来我定义的
};
你原来把lpNewFileName定义成CString类型,那你原来的赋值方法应该没问题啊,我看到有个lp还以为是个指针。
FILEPARAM* fileParam;//没初始化?比如FILEPARAM* fileParam=new FILEPARAM;
fileParam->lpNewFileName="d:\\Asset\\"+oDlg.GetFileName();
{
CString lpExistingFileName;
CString lpNewFileName;//这是原来我定义的
};
你原来把lpNewFileName定义成CString类型,那你原来的赋值方法应该没问题啊,我看到有个lp还以为是个指针。
FILEPARAM* fileParam;//没初始化?比如FILEPARAM* fileParam=new FILEPARAM;
fileParam->lpNewFileName="d:\\Asset\\"+oDlg.GetFileName();
#17
谢谢兄台。确实是没初始化。。
#18
确实是没初始化,可是为什么用②的时候不用初始化呢
#19
fileParam刚刚定义的时候是个随机指针,所以fileParam->lpNewFileName也是个随机指针,只是这个指针指向的地址是不确定的。
fileParam.lpNewFileName="d:\\Asset\\123.mpg";//把一个常量字符串指针赋给lpNewFileName,所以可以用,但是说不定什么时候lpNewFileName就被修改了。
fileParam.lpNewFileName="d:\\Asset\\"+oDlg.GetFileName();//赋值结果指向一个临时CString变量,这个变量一释放字符串内容就没了。
fileParam.lpNewFileName="d:\\Asset\\123.mpg";//把一个常量字符串指针赋给lpNewFileName,所以可以用,但是说不定什么时候lpNewFileName就被修改了。
fileParam.lpNewFileName="d:\\Asset\\"+oDlg.GetFileName();//赋值结果指向一个临时CString变量,这个变量一释放字符串内容就没了。
#20
恩。谢谢兄台。明白了