如何解决如何在CMD / c ++中重命名包含特殊字符的文件?
今天,我正在努力解决一个问题,而在其他帖子上,这个问题已经解决了一半。
这是我尝试通过系统命令使用dos命令在c ++中执行的操作:
command = "s: && cd " + all_paths[i] + " && rename \"" + linestring + "\" \"" + completeCorrectName+"\"";
//what it really contain is => "s: && cd S:\\Holliday\\Spain\\ && rename \"Spain - été 2018 !.mkv\" \"Spain - pool 2018.mkv\""
system(command.c_str());
这是我通过c ++程序启动的dos命令,因此我可以使用更多本地功能。
一切正常!除非我不能重命名包含特殊字符的文件。因此,我收到一个错误:“无法访问指定的文件”。那是因为特殊字符存储在我的字符串变量中,如下所示:
"maŒtre et ‚lŠve.mkv"
所以我尝试了"wstring"
,我尝试了"#Define UNICODE"
,也尝试了"#Define _UNICODE"
...什么都没用。
编辑:因为使用了dir方法,所以我使用了cmd / dos。 我这样保存dir方法:
command = "s: && cd " + all_paths[i] + " && dir /a-d /o-d /b *";
FILE* fpipe = _popen(command.c_str(),"r"); // run dir command and save it inside fpipe => memory file
if (fpipe) // If we can read it successfully
{
char line[500];
string linestring;
while (fgets(line,500,fpipe)) // looping on each line
{
linestring.clear();
for (int j : line) //Convert buffer in string
{
linestring.push_back(j);
}
}
解决方法
问题已解决: 确实,dir命令无法正确保存utf8,我被迫寻找另一种方法。 我从github上获取了“ dirent.h”,它在几行中解决了该问题:
DIR* directory = opendir(path);
struct dirent* direntStruct;
if (directory != NULL)
{
while (direntStruct = readdir(directory))
{
printf("File Name: %s\n",direntStruct->d_name);
}
}
但是,它仍然无法处理这样的字符:'œ'
因为这真的很特别,所以大约两个字母合为一个。
例如原始名称:
"Breach - 160 - Testament - Ton cœur est ici.mkv"
将被读取为:
B4RHTQ~A.MKV
这是dirent.h框架中的内部问题,无论如何,如果您尝试重命名该文件,它仍然可以工作!只是不要期望从文件名中获取信息... 我没有找到解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。