关于格式改变

johnlove9527 2010-12-12 02:06:15
我现在想实现由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格式。请问有什么方法吗?
...全文
161 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
johnlove9527 2010-12-23
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 visualeleven 的回复:]
你是要把dat文件的数据读出来,处理以后写入txt文件中,还是只是简单的重命名,将后缀名由dat转成txt呢?
[/Quote]

就是如果达到我要的先找到文件的路径,然后通过
CFile::Rename(pOldName, pNewName);
怎么改呢?呵呵,这两天忙其他问题了,现在继续想问问这个问题。呵呵。
johnlove9527 2010-12-16
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 schlafenhamster 的回复:]
sdatPath1 = datdlg.GetPathName();
要在打开CFileDialog后保存好。datdlg关闭后不取出保存为没有的。
[/Quote]

刚才看错了。以为代码是另外一个呢。

引用 24 楼 schlafenhamster 的回复:
sdatPath1 = datdlg.GetPathName();
要在打开CFileDialog后保存好。datdlg关闭后不取出保存为没有的。



我定义了static了,值不是不变了吗。全局局部变量


看错了。
johnlove9527 2010-12-16
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 stjay 的回复:]
CString sdatPath1="";
sdatPath1 = datdlg.GetPathName();
LPCTSTR pOldName = sdatPath1;
// TCHAR* pOldName = _T(sdatPath1);//"E:\\GisProTest\\可读取TXT\\data.dat"
int datpos1;
datpos1=sdatPath1.Revers……
[/Quote]

再定义一个String就可以了?
stjay 2010-12-16
  • 打赏
  • 举报
回复
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);//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();
}
johnlove9527 2010-12-16
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 schlafenhamster 的回复:]
sdatPath1 = datdlg.GetPathName();
要在打开CFileDialog后保存好。datdlg关闭后不取出保存为没有的。
[/Quote]

我定义了static了,值不是不变了吗。全局局部变量
Eleven 2010-12-14
  • 打赏
  • 举报
回复
你是要把dat文件的数据读出来,处理以后写入txt文件中,还是只是简单的重命名,将后缀名由dat转成txt呢?
Eleven 2010-12-14
  • 打赏
  • 举报
回复
TCHAR* pNewName = _T(sdatNPath1);
-----------------------------------
囧,哪能这么写的?
schlafenhamster 2010-12-14
  • 打赏
  • 举报
回复
sdatPath1 = datdlg.GetPathName();
要在打开CFileDialog后保存好。datdlg关闭后不取出保存为没有的。
johnlove9527 2010-12-14
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 schlafenhamster 的回复:]
你用CFileDialog了?
[/Quote]
恩。呵呵
johnlove9527 2010-12-14
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 visualeleven 的回复:]
你是要把dat文件的数据读出来,处理以后写入txt文件中,还是只是简单的重命名,将后缀名由dat转成txt呢?
[/Quote]

简单的后缀名改。关键是要把上一步保存的文件txt保存为dat,因为不知道路径,所以我添加了打开对话框,找到路径。对于
TCHAR* pNewName = _T(sdatNPath1);
我不太了解。没仔细看函数说明。呵呵。
schlafenhamster 2010-12-13
  • 打赏
  • 举报
回复
你用CFileDialog了?
johnlove9527 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 schlafenhamster 的回复:]
GetCurrentDirectory()
[/Quote]

因为这个目录路径是不确定的。所以我我搜索了下,然后找到路径的。

GetCurrentDirctory获取的是当前的进程的路径。那不就是程序的路径?但是我是找到txt文档的路径啊。
schlafenhamster 2010-12-12
  • 打赏
  • 举报
回复
GetCurrentDirectory()
johnlove9527 2010-12-12
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 schlafenhamster 的回复:]
sdatPath1 = datdlg.GetPathName();什么东西?
[/Quote]

获得当前文件路径。
schlafenhamster 2010-12-12
  • 打赏
  • 举报
回复
sdatPath1 = datdlg.GetPathName();什么东西?
johnlove9527 2010-12-12
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 schlafenhamster 的回复:]
Old 和New 都变了
Old="E:\\GisProTest\\可读取TXT\\data.dat"?
path对不对?是不是只读的?
提示没有找到 一未命名文件,就是Path不对
[/Quote]

sdatPath1对的啊。我看了pNewName和pOldName也变了。sdatNPath1也是对的。
目录下文件是在的。怎么会提示找不到未命名文件。
pOldName里最后是乱码:屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯。
schlafenhamster 2010-12-12
  • 打赏
  • 举报
回复
Old 和New 都变了
Old="E:\\GisProTest\\可读取TXT\\data.dat"?
path对不对?是不是只读的?
提示没有找到 一未命名文件,就是Path不对
johnlove9527 2010-12-12
  • 打赏
  • 举报
回复
CFile exception: fileNotFound, File Unknown, OS error information = 2.
调试到了e->ReportError();出现的
johnlove9527 2010-12-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 schlafenhamster 的回复:]
断点在CFile::Rename(pOldName, pNewName);看看pOldName, pNewName
[/Quote]

Old 和New 都变了。就是
e->ReportError();
e->Delete();
这边出了问题,具体
值是对的。已经换了名。
schlafenhamster 2010-12-12
  • 打赏
  • 举报
回复
断点在CFile::Rename(pOldName, pNewName);看看pOldName, pNewName

加载更多回复(9)

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧