VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 300|回复: 6

[已解决]求助,字符串编辑,修改文件名

[复制链接]
38_avatar_middle
最佳答案
0 
在线会员 发表于 2022-5-20 02:57:30 | 显示全部楼层 |阅读模式

修改文件名,好麻烦呀。。。
网上下载的视频,第一次下载6集,文件名中‘:’冒号是全角,  '('括号是半角。
第二次下载8集,文件名中‘:’冒号是全角,  '('括号是全角。
全角和半角,在char[ ]数组中是不同的。
string.rfind(''); 可以查找半角标点符号的位置,如何查找全角标点符号的位置?

写程序,折腾了半天,功能实现了。。。
程序,改的面目全非,惨不忍睹,自己都不忍心看了。。。
求大神,帮我修改一下。。。
多使用,字符串库函数,简化一下代码。。。。
下载的原文件名如下

空中浩劫第一季(国语配音) - 1.空中浩劫S01E01:联合航空811号班机(国语配音无字幕)(Av802929849,P1).mp4
空中浩劫第一季(国语配音) - 2.空中浩劫S01E02:美国航空1420号班机(国语配音无字幕)(Av802929849,P2).mp4
空中浩劫第一季(国语配音) - 3.空中浩劫S01E03:瑞士航空111号班机(国语配音无字幕)(Av802929849,P3).mp4
空中浩劫第一季(国语配音) - 4.空中浩劫S01E04:秘鲁航空603号班机(国语配音无字幕)(Av802929849,P4).mp4
空中浩劫第一季(国语配音) - 5.空中浩劫S01E05:阿拉斯加航空261号班机(国语配音无字幕)(Av802929849,P5).mp4
空中浩劫第一季(国语配音) - 6.空中浩劫S01E06:越洋航空236号班机(国语配音无字幕)(Av802929849,P6).mp4
空中浩劫系列(国语配音)2 - 2.空中浩劫S03E06:伊朗航空655号班机(国语配音)(Av467940195,P2).mp4
空中浩劫系列(国语配音)2 - 3.空中浩劫S03E08:埃及航空990号班机(国语配音)(Av467940195,P3).mp4
空中浩劫系列(国语配音)2 - 4.空中浩劫S04E07:墨西哥国际航空498号班机(国语配音)(Av467940195,P4).mp4
空中浩劫系列(国语配音)2 - 5.空中浩劫S11E01:巴西天马航空3054号班机(国语配音)(Av467940195,P5).mp4
空中浩劫系列(国语配音)2 - 6.空中浩劫S11E02:西加勒比海航空708号班机(国语配音)(Av467940195,P6).mp4
空中浩劫系列(国语配音)2 - 7.空中浩劫S11E09:尼日利亚航空2120号班机(国语配音)(Av467940195,P7).mp4
空中浩劫系列(国语配音)2 - 8.空中浩劫S11E10:太平洋西南航空1771号班机(国语配音)(Av467940195,P8).mp4
空中浩劫系列(国语配音)2 - 9.空中浩劫S11E13:美国联合航空232号班机(国语配音)(Av467940195,P9).mp4




修改后文件名如下

联合航空811号班机.mp4
美国航空1420号班机.mp4
瑞士航空111号班机.mp4
秘鲁航空603号班机.mp4
阿拉斯加航空261号班机.mp4
越洋航空236号班机.mp4
伊朗航空655号班机.mp4
埃及航空990号班机.mp4
墨西哥国际航空498号班机.mp4
巴西天马航空3054号班机.mp4
西加勒比海航空708号班机.mp4
尼日利亚航空2120号班机.mp4
太平洋西南航空1771号班机.mp4
美国联合航空232号班机.mp4


  1. #include<iostream>
  2. #include<io.h>
  3. #include<string>
  4. using namespace std;
  5. void changeFileName(string path)
  6. {
  7.         char exte[5] = ".mp4";                 //文件扩展名
  8.         _finddata_t findData;
  9.         intptr_t handle = _findfirst(path.c_str(), &findData);  //查找目录中的第一个文件
  10.         if(handle == -1) throw exception("Error");
  11.         do
  12.         {
  13.                 char oldname[260] = {0};
  14.                 char newname[260] = {0};
  15.                         int j=0;
  16.                         strcpy(oldname, findData.name);
  17.                         for(j=0; j<128; j++)
  18.                         {
  19.                                 if(oldname[j] == '-')  //原文件名中都有‘-’,防止文件改名后,再次被读入进行改名。。。
  20.                                         break;
  21.                         }
  22.                         if(j >= 128)
  23.                                 continue;
  24.                         int i=0;
  25.                         while(!(oldname[i] == -93 && oldname[i+1] == -70))
  26.                                 i++;
  27.                         i += 2;
  28.                         int start = i;
  29.                 for(; i<260; i++)
  30.                 {
  31.                         if(oldname[i] == 40||(oldname[i]== -93 && oldname[i+1] == -88))
  32.                                 break;
  33.                         newname[i-start] = oldname[i];
  34.                 }
  35.                 strcat(newname,exte);                //添加文件扩展名 .mp4

  36.                 char old[512] = "C:\\Users\\Administrator\\Desktop\\[WPF]JJDown\\Download\";
  37.                 char nwe[512] = "C:\\Users\\Administrator\\Desktop\\[WPF]JJDown\\Download\";

  38.                 strcat(old, oldname);
  39.                 strcat(nwe, newname);
  40.                 rename(old, nwe);
  41.         }while(_findnext(handle, &findData) == 0);          //找到目录中下一个文件
  42.         _findclose(handle);
  43. }

  44. int main()
  45. {
  46.         string path = "C:\\Users\\Administrator\\Desktop\\[WPF]JJDown\\Download\\*.mp4";
  47.         changeFileName(path);
  48.         return 0;
  49. }
复制代码


源代码文件
求助,字符串编辑,修改文件名 main.rar (806 Bytes, 下载次数: 3)




上一篇:MFC设计提示框和输入框
下一篇:VC++ 制作MFC画图软件遇到重影问题
17_avatar_middle
最佳答案
39 
在线会员 发表于 2022-5-20 17:15:23 | 显示全部楼层    本楼为最佳答案   
bestAnswer
本帖最后由 yoobaby 于 2022-5-20 17:28 编辑

// 用的是wstring 你要用其它字符自己看着改下。这个正则写得有点粗暴,但用是没问题的。
  1. #include <regex>
  2. int main() {
  3.         wstring str = L"空中浩劫第一季(国语配音) - 1.空中浩劫S01E01:联合航空811号班机(国语配音无字幕)(Av802929849,P1).mp4";
  4.         wregex pattern(L".*[::](.+)[((]国.*");
  5.         wstring result = regex_replace(str, pattern, L"$1.mp4");

  6.         setlocale(LC_ALL, "chs");
  7.         std::wcout << result << endl;
  8. }
复制代码
38_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-5-22 18:22:47 | 显示全部楼层
本帖最后由 zmrghy 于 2022-5-22 18:24 编辑
yoobaby 发表于 2022-5-20 17:15
// 用的是wstring 你要用其它字符自己看着改下。这个正则写得有点粗暴,但用是没问题的。


什么输出,也没有呀。哪里错了呀。。。
求助,字符串编辑,修改文件名
17_avatar_middle
最佳答案
39 
在线会员 发表于 2022-5-22 22:19:10 | 显示全部楼层
zmrghy 发表于 2022-5-22 18:22
什么输出,也没有呀。哪里错了呀。。。


没看出哪出问题,我这复制代码是可以的,,
求助,字符串编辑,修改文件名


求助,字符串编辑,修改文件名 StartConsole.rar (401 Bytes, 下载次数: 2)
38_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-5-23 00:28:00 | 显示全部楼层
本帖最后由 zmrghy 于 2022-5-23 00:31 编辑

见鬼,代码完全一样。。。
还是没有输出

求助,字符串编辑,修改文件名

完整项目
求助,字符串编辑,修改文件名 test.rar (3.25 MB, 下载次数: 0)
38_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-5-23 00:42:43 | 显示全部楼层
yoobaby 发表于 2022-5-22 22:19
没看出哪出问题,我这复制代码是可以的,,


字符串是正确的。。。

为什么没有输出呀?、、

求助,字符串编辑,修改文件名
38_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2022-5-23 01:32:43 | 显示全部楼层
本帖最后由 zmrghy 于 2022-5-23 01:34 编辑
yoobaby 发表于 2022-5-20 17:15
// 用的是wstring 你要用其它字符自己看着改下。这个正则写得有点粗暴,但用是没问题的。


百度了一下,wcout无输出。
照葫画瓢,显示出来了。
还不清楚什么原因。。。
求助,字符串编辑,修改文件名
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号-4 )|网站地图wx_jqr

GMT+8, 2022-11-30 22:29

Powered by CcTry.CoM

© 2009-2021 cctry.com

快速回复 返回顶部 返回列表