Я создаю список файлов, используя dirent, но я беспокоюсь о каталогах и файлах, содержащих символы Unicode.Есть ли способ получить dirent's ent-> d_name как w_char *?
void recurse_dir(char *dir)
{
DIR* d;
d = opendir(dir);
struct dirent* ent;
unsigned short int dir_size = strlen(dir), tmp_dir_size;
if(d != NULL)
{
while((ent = readdir(d)) != NULL)
{
if(ent->d_type == DT_DIR)
{
if(!strcmp(ent->d_name,".") || !strcmp(ent->d_name,".."))
continue;
folder_count++;
char tmp_dir[dir_size + strlen(ent->d_name) + 2];
tmp_dir[0] = '\0';
strcat(tmp_dir,dir);
strcat(tmp_dir,"/");
strcat(tmp_dir,ent->d_name);
recurse_dir(tmp_dir);
}
else
{
file_count++;
file_strs_size += dir_size + strlen(ent->d_name) + 2;
fprintf(list_fp, "%s/%s\n",dir, ent->d_name);
}
}
}
closedir(d);
}
Есть ли способ, которым я могу получить имя ent-> d_ в широкоформатном формате?
Обратите внимание, что в то время как, например, на linux, UTF-8 обычно является кодировкой по умолчанию, и, следовательно, имена файлов, как правило, заканчиваются как UTF-8. Но имена файлов могут храниться в любой кодировке или даже некорректной кодировке. Единственными недопустимыми символами являются nul-терминатор и /. Таким образом, вам обычно лучше не делать никаких манипуляций или конверсий по именам файлов – nos