我现在想实现由dat格式转为txt。但是实现出错了。不知道怎么回事。
代码如下。
CFileDialog datdlg(TRUE,"文件转换",".dat",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"dat(*.dat)|*.dat||");
if(datdlg.DoModal()==IDOK)
{
CString sdatPath1="";
sdatPath1 = datdlg.GetPathName();
TCHAR* pOldName = _T(sdatPath1);
int datpos1;
datpos1=sdatPath1.ReverseFind('\\');
sdatPath1=sdatPath1.Left(datpos1);
CString sdatNPath1;
sdatNPath1=sdatPath1 + "\\data21.txt"; TCHAR* pNewName = _T(sdatNPath1);
try
{
CFile::Rename(pOldName, pNewName);
}
catch(CFileException* e)
{
e->ReportError();
e->Delete();
}
//修改文件后缀名
}
但是出现error C2440: 'initializing' : cannot convert from 'class CString' to 'char *'
请问如何解决啊。
我是想把打开的文件里dat文件转为txt格式。请问有什么方法吗?
代码如下。
CFileDialog datdlg(TRUE,"文件转换",".dat",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"dat(*.dat)|*.dat||");
if(datdlg.DoModal()==IDOK)
{
CString sdatPath1="";
sdatPath1 = datdlg.GetPathName();
TCHAR* pOldName = _T(sdatPath1);
int datpos1;
datpos1=sdatPath1.ReverseFind('\\');
sdatPath1=sdatPath1.Left(datpos1);
CString sdatNPath1;
sdatNPath1=sdatPath1 + "\\data21.txt"; TCHAR* pNewName = _T(sdatNPath1);
try
{
CFile::Rename(pOldName, pNewName);
}
catch(CFileException* e)
{
e->ReportError();
e->Delete();
}
//修改文件后缀名
}
但是出现error C2440: 'initializing' : cannot convert from 'class CString' to 'char *'
请问如何解决啊。
我是想把打开的文件里dat文件转为txt格式。请问有什么方法吗?
或者:
TCHAR* pOldName = (LPTSTR)(LPTCSTR)sdatPath1;
那么如果不能转化成TCHAR *
那有什么方法VC中改变后缀呢?
CString sdatPath1="";
sdatPath1 = datdlg.GetPathName();
LPCTSTR pOldName = sdatPath1;
// TCHAR* pOldName = _T(sdatPath1);//"E:\\GisProTest\\可读取TXT\\data.dat"
int datpos1;
datpos1=sdatPath1.ReverseFind('\\');
sdatPath1=sdatPath1.Left(datpos1);
CString sdatNPath1;
sdatNPath1=sdatPath1 + "\\data21.txt";// TCHAR* pNewName = _T(sdatNPath1);//"E:\\GisProTest\\可读取TXT\\data.txt"
LPCTSTR pNewName = sdatNPath1;
try
{
CFile::Rename(pOldName, pNewName);
}
catch(CFileException* e)
{
e->ReportError();
e->Delete();
}
但是提示没有找到 一未命名文件。请问是怎么回事?
调试到
e->ReportError();
这就卡了。
Old 和New 都变了。就是
e->ReportError();
e->Delete();
这边出了问题,具体
值是对的。已经换了名。
调试到了e->ReportError();出现的
Old="E:\\GisProTest\\可读取TXT\\data.dat"?
path对不对?是不是只读的?
提示没有找到 一未命名文件,就是Path不对
sdatPath1对的啊。我看了pNewName和pOldName也变了。sdatNPath1也是对的。
目录下文件是在的。怎么会提示找不到未命名文件。
pOldName里最后是乱码:屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯。
因为这个目录路径是不确定的。所以我我搜索了下,然后找到路径的。GetCurrentDirctory获取的是当前的进程的路径。那不就是程序的路径?但是我是找到txt文档的路径啊。
-----------------------------------
囧,哪能这么写的?
简单的后缀名改。关键是要把上一步保存的文件txt保存为dat,因为不知道路径,所以我添加了打开对话框,找到路径。对于
TCHAR* pNewName = _T(sdatNPath1);
我不太了解。没仔细看函数说明。呵呵。
要在打开CFileDialog后保存好。datdlg关闭后不取出保存为没有的。
我定义了static了,值不是不变了吗。全局局部变量
sdatPath1 = datdlg.GetPathName();
LPCTSTR pOldName = sdatPath1;
// TCHAR* pOldName = _T(sdatPath1);//"E:\\GisProTest\\可读取TXT\\data.dat"
int datpos1;
datpos1=sdatPath1.ReverseFind('\\');
//sdatPath1=sdatPath1.Left(datpos1);//sdatPath1被修改了
CString sdatNPath1;
sdatNPath1=sdatPath1.Left(datpos1);
sdatNPath1+= "\\data21.txt";// TCHAR* pNewName = _T(sdatNPath1);//"E:\\GisProTest\\可读取TXT\\data.txt"
LPCTSTR pNewName = sdatNPath1;
try
{
CFile::Rename(pOldName, pNewName);
}
catch(CFileException* e)
{
e->ReportError();
e->Delete();
}
再定义一个String就可以了?
刚才看错了。以为代码是另外一个呢。引用 24 楼 schlafenhamster 的回复:
sdatPath1 = datdlg.GetPathName();
要在打开CFileDialog后保存好。datdlg关闭后不取出保存为没有的。我定义了static了,值不是不变了吗。全局局部变量
看错了。
就是如果达到我要的先找到文件的路径,然后通过
CFile::Rename(pOldName, pNewName);
怎么改呢?呵呵,这两天忙其他问题了,现在继续想问问这个问题。呵呵。