如何从本地读取一段TS流文件,并保存起来

古风苍鹰 2012-11-12 05:20:53
如题目:如何从本地读取一段TS流文件,并保存为文件"MyTS.ts";
最好能给出详细的代码,还有解释。
谢谢了。

以下是本人写的一段读取代码,但是不正确


void CChatServerDlg::OnBnClickedButton8()
{
// TODO: 在此添加控件通知处理程序代码
char *pbuffer;
FILE *file=NULL;
if ((file = fopen("E:\\Visual C++\\ChatServer\\df300m.ts", "rb")) != NULL)
{
fseek(file ,0L, SEEK_END);
int ifilesize = ftell(file); //得到文件长度
pbuffer =(char*)malloc(ifilesize+1);//初始化pbuffer的大小
if(pbuffer==NULL)
{
fclose(file);
MessageBox("初始化缓存大小失败!");
}

else
{
fseek(file ,0L, SEEK_SET);//文件指针指向文件开始处
fread(pbuffer, 1,ifilesize, file);
pbuffer[ifilesize]=0;

fclose(file);

m_ListWords1.AddString(pbuffer);
MessageBox("读取文件成功");
}

}


}


能帮忙解释下原因吗?
程序的目的是将本地的TS流文件"df300m.ts",读到缓存pbuffer中,然后想把pbuffer中的数据
显示在列表框中,但是总不成功。

我自己感觉就是读取的数据格式我没有弄清楚,TS文件读取后其是不是就是二进制文件还是别的表现形式。

在线等待大神解答……


任何指导都会给分。

谢谢。
...全文
2934 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
liuxiaoyu0717 2014-04-28
  • 打赏
  • 举报
回复
楼主也发给我一份吧,我的邮箱:347158019@qq.com ,多谢了~~~
sxy521 2014-04-17
  • 打赏
  • 举报
回复
楼主能不能给我发一份
cai3010204167 2014-04-09
  • 打赏
  • 举报
回复
楼主能不能把代码发给我一份,邮箱1101690153@qq.com
RuanYSU 2013-10-15
  • 打赏
  • 举报
回复
引用
13
楼主最后是怎么解决的呀?
古风苍鹰 2012-11-18
  • 打赏
  • 举报
回复
引用 12 楼 MoWenXingMing 的回复:
把你的邮箱给我我把我写好的代码发给你。
嗯。非常感谢!
MoWenXingMing 2012-11-18
  • 打赏
  • 举报
回复
把你的邮箱给我我把我写好的代码发给你。
I_ask_who 2012-11-13
  • 打赏
  • 举报
回复
试了下,读取mp3是成功的,可能文件位置没有找到,或者损坏什么

#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
cout << "Hello world!" << endl;
FILE *file=NULL;
if ((file = fopen("01 Is Greece In Danger Of Losing Tre.mp3", "rb")) != NULL){
cout<<"file open ok"<<endl;
fseek(file ,0L, SEEK_END);
int ifilesize = ftell(file);
cout<<"file size = "<<ifilesize;
fclose(file);
}
return 0;
}


I_ask_who 2012-11-13
  • 打赏
  • 举报
回复
平时vs2005,写短程序Qt或者CodeBlock或者vc6,这次Code::Block
一般CRT库函数支持的路径可以为/正斜杠
没有读过TS,你可用vim打开任何文件查看二进制
古风苍鹰 2012-11-13
  • 打赏
  • 举报
回复
引用 9 楼 mcmcmc 的回复:
试了下,读取mp3是成功的,可能文件位置没有找到,或者损坏什么 C/C++ code?1234567891011121314151617181920#include <iostream>#include <stdio.h> using namespace std; int main(){ cout << "Hello world!" << endl; FIL……
的确是我的文件出现了问题。 请问你用的是什么开发环境。 我用的是VS2008,在写路径的时候需要“\\”; 后来我自己解决了TS流读取的问题。 但是又碰到传输的问题了。 而且读取的第一个字符串并非是0X47; 请问你以前读取过TS流吗?
古风苍鹰 2012-11-13
  • 打赏
  • 举报
回复
引用 5 楼 mcmcmc 的回复:
读取应该是正确的,不过不知道什么格式的情况下,也没有办法分析,只有猜了. 有些文件格式还是很复杂的,象WORD的doc文件也是二进制,只有微软知道里面有什么.
现在我才知道,自己根本就没有读取成功。
古风苍鹰 2012-11-13
  • 打赏
  • 举报
回复
引用 6 楼 samqsu_amba 的回复:
引用 3 楼 gufengcangying 的回复:引用 2 楼 samqsu_amba 的回复:
malloc一个是pbuffer 2倍大小的buffer2,用sprintf %2x把pbuffer转为十六进制字符存到buffer2,m_ListWords1.AddString(buffer2);

我想问问我这种读取TS流的方式正确吗??

读取后如何保存到……

不对啊。
当我在控制台下面调试的时候,发现读取文件大小就不正确
控制台下的代码如下:

char *pbuffer;
FILE *file=NULL;
if ((file = fopen("E:\\Visual C++\\ChatServer\\df300m.ts", "rb")) != NULL)
{
fseek(file ,0L, SEEK_END);
int ifilesize = ftell(file); //得到文件长度
cout<<"文件大小为:"<<ifilesize;
pbuffer =(char*)malloc(ifilesize+1);//初始化pbuffer的大小
if(pbuffer==NULL)
{
fclose(file);
cout<<"打开错误了。";

}
else
{
fseek(file ,0L, SEEK_SET);//文件指针指向文件开始处
fread(pbuffer, 1,ifilesize, file);
pbuffer[ifilesize]=0;

fclose(file);
cout<<"读取文件成功";

}

}

输出结果如下 根本就不正确。
samqsu_amba 2012-11-12
  • 打赏
  • 举报
回复
引用 3 楼 gufengcangying 的回复:
引用 2 楼 samqsu_amba 的回复: malloc一个是pbuffer 2倍大小的buffer2,用sprintf %2x把pbuffer转为十六进制字符存到buffer2,m_ListWords1.AddString(buffer2); 我想问问我这种读取TS流的方式正确吗?? 读取后如何保存到"E:\\Visual C++\\ChatServer\\MyTS.ts"中?……
正确,不管什么类型格式,放到文件里面都可是二进制吧。 保存文件:比如读数据到pbuffer,大小是ifilesize,那就fopen--->fwrite(pbuffer,ifilesize)- >fclose.
I_ask_who 2012-11-12
  • 打赏
  • 举报
回复
读取应该是正确的,不过不知道什么格式的情况下,也没有办法分析,只有猜了. 有些文件格式还是很复杂的,象WORD的doc文件也是二进制,只有微软知道里面有什么.
古风苍鹰 2012-11-12
  • 打赏
  • 举报
回复
引用 1 楼 mcmcmc 的回复:
二进制可以表示多重数据,可能是ASCII码,也可能是一串浮点,也可能是其他用户的定义的数据 既然是2进制,那么0x00也是数据,对于字符串则是结束符 m_ListWords1.AddString(pbuffer)是有问题的 最保险的方法是将每一个Byte转成2个16进制数,然后用%X显示
我现在也不知道自己读取的文件是什么格式的???
古风苍鹰 2012-11-12
  • 打赏
  • 举报
回复
引用 2 楼 samqsu_amba 的回复:
malloc一个是pbuffer 2倍大小的buffer2,用sprintf %2x把pbuffer转为十六进制字符存到buffer2,m_ListWords1.AddString(buffer2);
我想问问我这种读取TS流的方式正确吗?? 读取后如何保存到"E:\\Visual C++\\ChatServer\\MyTS.ts"中?
samqsu_amba 2012-11-12
  • 打赏
  • 举报
回复
malloc一个是pbuffer 2倍大小的buffer2,用sprintf %2x把pbuffer转为十六进制字符存到buffer2,m_ListWords1.AddString(buffer2);
I_ask_who 2012-11-12
  • 打赏
  • 举报
回复
二进制可以表示多重数据,可能是ASCII码,也可能是一串浮点,也可能是其他用户的定义的数据 既然是2进制,那么0x00也是数据,对于字符串则是结束符 m_ListWords1.AddString(pbuffer)是有问题的 最保险的方法是将每一个Byte转成2个16进制数,然后用%X显示

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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