Size: a a a

2020 June 24

v

vehlwn in pro.cxx
Alex Ф-ф-фэils!🌠︙
Проверь сам
Проверил.
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main()
try
{
   auto ret1 = fs::file_size("../main.cpp");
   std::cout << "size = " << ret1 << '\n';
   auto ret2 = fs::file_size("../жопа.txt");
   std::cout << "size = " << ret2 << '\n';
}
catch(fs::filesystem_error& e)
{
   std::cout << e.what() << '\n';
}
a.exe
size = 362
file_size: The system cannot find the file specified.: "../╨╢╨╛╨┐╨░.txt"

Больше я стдфс не хочу пользоваться.
источник

A

Alex Ф-ф-фэils!🌠︙... in pro.cxx
vehlwn
Проверил.
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main()
try
{
   auto ret1 = fs::file_size("../main.cpp");
   std::cout << "size = " << ret1 << '\n';
   auto ret2 = fs::file_size("../жопа.txt");
   std::cout << "size = " << ret2 << '\n';
}
catch(fs::filesystem_error& e)
{
   std::cout << e.what() << '\n';
}
a.exe
size = 362
file_size: The system cannot find the file specified.: "../╨╢╨╛╨┐╨░.txt"

Больше я стдфс не хочу пользоваться.
Это ты cp1251 схоронял?
источник

A

Alex in pro.cxx
здесь должен быть utf8 литерал, а не просто const char*
источник

АК

Александр Караев... in pro.cxx
vehlwn
Проверил.
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main()
try
{
   auto ret1 = fs::file_size("../main.cpp");
   std::cout << "size = " << ret1 << '\n';
   auto ret2 = fs::file_size("../жопа.txt");
   std::cout << "size = " << ret2 << '\n';
}
catch(fs::filesystem_error& e)
{
   std::cout << e.what() << '\n';
}
a.exe
size = 362
file_size: The system cannot find the file specified.: "../╨╢╨╛╨┐╨░.txt"

Больше я стдфс не хочу пользоваться.
fs::file_size(u8"../жопа.txt");?
источник

A

Alex Ф-ф-фэils!🌠︙... in pro.cxx
Александр Караев
fs::file_size(u8"../жопа.txt");?
Угу
источник

ПК

Побитый Кирпич... in pro.cxx
vehlwn
Poco::File и QFileInfo по умолчанию работают с узкими строками в утф8 и внутри конвертирует их в утф16, если венда.
char* это ACP считается на винде, для utf8 надо юзать char8_t*
источник

ПК

Побитый Кирпич... in pro.cxx
Dollar Føølish
В винде вроде не утф 16,  а ucs-2 только
Нет
источник

v

vehlwn in pro.cxx
Alex Ф-ф-фэils!🌠︙
Это ты cp1251 схоронял?
fileencoding=utf-8
источник

ПК

Побитый Кирпич... in pro.cxx
vehlwn
Проверил.
#include <filesystem>
#include <iostream>
namespace fs = std::filesystem;
int main()
try
{
   auto ret1 = fs::file_size("../main.cpp");
   std::cout << "size = " << ret1 << '\n';
   auto ret2 = fs::file_size("../жопа.txt");
   std::cout << "size = " << ret2 << '\n';
}
catch(fs::filesystem_error& e)
{
   std::cout << e.what() << '\n';
}
a.exe
size = 362
file_size: The system cannot find the file specified.: "../╨╢╨╛╨┐╨░.txt"

Больше я стдфс не хочу пользоваться.
char* это не utf-8
источник

v

vehlwn in pro.cxx
Alex
здесь должен быть utf8 литерал, а не просто const char*
Почему пользователь должен думать о типе строки, когда он работает с абстракцией "путь с файловой системе"? Росо и кутэ почему-то не выдают пользователю свою внутрянку с утф-16.
источник

v

vehlwn in pro.cxx
Александр Караев
fs::file_size(u8"../жопа.txt");?
Не получается.
источник

EP

Egor Pugin in pro.cxx
vehlwn
Не получается.
там ещё и флаг компилятору надо передать /utf-8
источник

IL

Ignat Loskutov in pro.cxx
vehlwn
Почему пользователь должен думать о типе строки, когда он работает с абстракцией "путь с файловой системе"? Росо и кутэ почему-то не выдают пользователю свою внутрянку с утф-16.
Ну вот они и не работают
источник

IL

Ignat Loskutov in pro.cxx
Традиционно в POSIX-системах имя файла — это плюс-минус просто последовательность байт
источник

ПК

Побитый Кирпич... in pro.cxx
vehlwn
Не получается.
Да блин, utf-8 литералы для путей на винде только с конвертацией можно юзать
источник

A

Alex in pro.cxx
vehlwn
Почему пользователь должен думать о типе строки, когда он работает с абстракцией "путь с файловой системе"? Росо и кутэ почему-то не выдают пользователю свою внутрянку с утф-16.
Как раз с wchar такой проблемы бы не было, а однобайтные кодировки неоднозначны.
источник

v

vehlwn in pro.cxx
> character type used by the native encoding of the filesystem: char on POSIX, wchar_t on Windows

Зачем они сделали value_type разным на разных платформах? Чтобы не реализовывать конвертацию узких строк в нативные для венды строки?
источник

ПК

Побитый Кирпич... in pro.cxx
vehlwn
Почему пользователь должен думать о типе строки, когда он работает с абстракцией "путь с файловой системе"? Росо и кутэ почему-то не выдают пользователю свою внутрянку с утф-16.
Там точно так же нельзя проивзольную последовательность байт передать и получить валидный путь в нужной кодировке. Ты всегда должен о кодировке думать
источник

ПК

Побитый Кирпич... in pro.cxx
Alex
Как раз с wchar такой проблемы бы не было, а однобайтные кодировки неоднозначны.
с wchar та же проблема
источник

A

Alex in pro.cxx
Побитый Кирпич
с wchar та же проблема
Да, пока дописал, уже понял, что корявая кодировка самого исходного файла побьёт данные так или иначе.
источник