导航
  • 主页
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

关于CFile的问题

jlcs2002 2010-08-15 10:43:08
关于播放器的打开的问题

TRY
{
CStdioFile f(csPath,
CFile::modeRead |
CFile::typeText |
CFile::shareExclusive);//这个是关于读取文件的函数

// 读文件头"#EXTM3U"
if (!f.ReadString(csLine))//这个是读取头文件 为什么要读取这个头文件啊
{
return 0;
}

if (!(csLine == _T("#EXTM3U")))
{
AfxMessageBox(_T("文件格式错误!\n") + csPath);
return 0;
}

while (f.ReadString(csLine)) // 按行读取
{
csHead=csLine.Left(7);
csHead.MakeUpper();

if (csHead == _T("#EXTINF"))从下面开始就不是很明白其中的细节作用了 谢谢注释下
{
csInfo = csLine;
if ((nColon=csInfo.Find(':'))!=-1 &&
(nComma=csInfo.Find(','))!=-1)
{
csLength = csInfo.Mid(nColon + 1, nComma - nColon);
csTitle = csInfo.Mid(nComma + 1);

csLength.Format("%d:%02d", nLength/60, nLength%60);
}
continue;
}
else
{
csPath = csLine;
if (m_listctrlSongList.GetItemCount() != 0 && nCount == 0)
{
m_listctrlSongList.DeleteAllItems(); // 清空歌曲列表
}

if (csTitle.IsEmpty()) // 标题为空
{
GetFileTitle(csPath.GetBuffer(255),
csTitle.GetBuffer(255),
255);
csTitle = (char)(nCount+1+48) + csTitle;
AfxMessageBox(csTitle);
}

if (csLength.IsEmpty()) // 长度为空
csLength = _T("00:00");
m_listctrlSongList.InsertItem(nCount, csTitle);
m_listctrlSongList.SetItemText(nCount, 1, csLength);
m_listctrlSongList.SetItemText(nCount, 2, csPath);

UpdateSongInfo(nCount); // 更新歌曲信息

nCount++;

csInfo=_T("");
csPath=_T("");
csLength=_T("");
csTitle=_T("");
}
...全文
82 点赞 收藏 6
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Abcix 2010-08-16
字符编码的标记,用来判断字符的编码格式,字符编码有很多种,如GB2312,UTF-8,UTF-16,ANSI,UNCODE,如果不知道编码格式,读出来的就是乱码。
回复
cw7600 2010-08-16
来看看 表示关注~~~~~~~~~~
回复
jlcs2002 2010-08-16
自己搞明白了 谢谢了各位!!

if (csHead == _T("#EXTINF"))//#EXTINF格式来读取音乐#EXTINF:歌曲长度,名字
{
csInfo = csLine; 把读取的字符串赋给csInfo
if ((nColon=csInfo.Find(':'))!=-1 &&//找到:的位置返回位置值给nColon
(nComma=csInfo.Find(','))!=-1)//找到,把“,”在字符串中的位置赋给nComma
{
csLength = csInfo.Mid(nColon + 1, nComma - nColon);//Mid是提取从nColon+1开始到nComma-nColon之间的字符串。既歌曲长度然后赋给csLnegth
csTitle = csInfo.Mid(nComma + 1);//从csInfo中提取nComma+1到完的字符串,既:歌曲的名字

csLength.Format("%d:%02d", nLength/60, nLength%60);//将保存长度的字符串转化为十进制的格式
}
continue;//完了之后跳出此次循环继续下一次循环。
}
else//读取在保存的cspath路径
{
csPath = csLine;//将路径的名字赋给csLine以便读取下一个歌曲名字
if (m_listctrlSongList.GetItemCount() != 0 && nCount == 0)
{
m_listctrlSongList.DeleteAllItems(); // 清空歌曲列表
}

if (csTitle.IsEmpty()) // 标题为空
{
GetFileTitle(csPath.GetBuffer(255),
csTitle.GetBuffer(255),
255);
csTitle = (char)(nCount+1+48) + csTitle;
AfxMessageBox(csTitle);
}

if (csLength.IsEmpty()) // 长度为空
csLength = _T("00:00");
m_listctrlSongList.InsertItem(nCount, csTitle);//将各个信息全部跟新与列表
m_listctrlSongList.SetItemText(nCount, 1, csLength);
m_listctrlSongList.SetItemText(nCount, 2, csPath);

UpdateSongInfo(nCount); // 更新歌曲信息

nCount++;

希望对大家有用

回复
jlcs2002 2010-08-15


下面这些还有很多不明白 到底是怎么读进去的
if (csHead == _T("#EXTINF"))//从下面开始就不是很明白其中的细节作用了 谢谢注释下
{
csInfo = csLine;
if ((nColon=csInfo.Find(':'))!=-1 && //这个的作用也不知道
(nComma=csInfo.Find(','))!=-1)
{
csLength = csInfo.Mid(nColon + 1, nComma - nColon);
csTitle = csInfo.Mid(nComma + 1);

csLength.Format("%d:%02d", nLength/60, nLength%60);
}
continue;
}
else
{
csPath = csLine;
if (m_listctrlSongList.GetItemCount() != 0 && nCount == 0)
{
m_listctrlSongList.DeleteAllItems(); // 清空歌曲列表
}

if (csTitle.IsEmpty()) // 标题为空
{
GetFileTitle(csPath.GetBuffer(255),
csTitle.GetBuffer(255),
255);
csTitle = (char)(nCount+1+48) + csTitle;
AfxMessageBox(csTitle);
}

if (csLength.IsEmpty()) // 长度为空
csLength = _T("00:00");
m_listctrlSongList.InsertItem(nCount, csTitle);
m_listctrlSongList.SetItemText(nCount, 1, csLength);
m_listctrlSongList.SetItemText(nCount, 2, csPath);

UpdateSongInfo(nCount); // 更新歌曲信息

nCount++;

回复
因为你要判断文件格式,所以你要读第一行的内容然后比较
回复
发动态
发帖子
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
社区公告

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