【求助】一个WAV文件头的问题,有空的朋友帮忙写个小程序,谢谢

avenger 2005-04-07 07:37:21
一个保存公司电话录音的硬盘误格式化,通过恢复软件,找回了一部分数据。皆为wav格式,不过头文件好像已经被损坏了,不能播放。

经测试把目前文件的前三行(用UltraEdit-32打开后)用WAV头部覆盖后可以正常播放。见附图所示,不过目前文件有上万个,不可能一个一个去换。

希望哪个朋友有空能帮个忙写个批处理,能够自动遍历当前目录下的所有wav文件,并把头部三行替换成附件中的头文件就行了。

万分感谢。

附件链接:http://www.d4e.org/attachment.php?attachmentid=88041
...全文
151 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
rushinger 2005-04-10
  • 打赏
  • 举报
回复
用CFileFind搜索一个指定的文件夹,对扩展名为wav的执行以上代码。其中strSourceFile为CFindFind找到的wav文件路径,strTempFile为由strSourceFile合成的、同路径下的临时文件名,比如
strTempFile = strSourceFile + ".tmp";
rushinger 2005-04-10
  • 打赏
  • 举报
回复
sourceFile.Close();
tempFile.Close();

DeleteFile(strSourceFile);
rename(strTempFile, strSourceFile);

rushinger 2005-04-10
  • 打赏
  • 举报
回复
byte header[42] = {0x52, 0x49, 0x46, 0x46, 0x34, 0x40, 0x06, 0x00, 0x57, 0x41, 0x56, 0x45, 0x66, 0x6D, 0x74, 0x20, 0x14, 0x0, 0x0, 0x0, 0x11, 0x0, 0x1, 0x0, 0x40, 0x1F, 0x0, 0x0, 0xD7, 0x0F, 0x0, 0x0, 0x0, 0x01, 0x04, 0x0, 0x02, 0x0, 0xF9, 0x01, 0x66, 0x61, 0x63, 0x74, 0x04};
byte buffer[42];
DWORD dwRead = 0;
BOOL bResult
CFileException ex;
CFile sourceFile;
CFile tempFile;
bResult = sourceFile.Open(strSourceFile, CFile::modeRead | CFile::shareDenyNone | CFile::typeBinary, &ex);
bResult = tempFile.Open(strTempFile, CFile::modeWrite | CFile::shareExclusive | CFile::typeBinary | CFile::modeCreate, &ex);
tempFile.Write(header, 42);
sourceFile.Read(buffer, 42);

do
{
dwRead = sourceFile.Read(buffer, 42);
tempFile.Write(header, dwRead);
}while(dwRead > 0);

DeleteFile(strSourceFile);
rename(strTempFile, strSourceFile);
avenger 2005-04-10
  • 打赏
  • 举报
回复
感谢DRL的billholt帮忙,问题已完美解决,修复程序已经上传到 www.phpe.net/WaveRepair.zip 两天后删除,结贴,感谢所有关注的朋友。
avenger 2005-04-09
  • 打赏
  • 举报
回复
已上传到 http://www.phpe.net/WAV.rar 谢谢帮忙
ycom__net 2005-04-08
  • 打赏
  • 举报
回复
查一下命令,然后照猫画虎,

是在不行,上网搜下,应该挺多得

avenger 2005-04-08
  • 打赏
  • 举报
回复
up

15,447

社区成员

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

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