Мои экстрасенсорные способности говорят мне, что имя файла содержит символы, не входящие в ASCII, и ошибка в случае сбоя - "файл не найден".
В коде вы копируете широкие символы в обычные char
с. Для чего-либо за пределами ASCII это не будет делать то, что вы хотите.
Ваш пример кода не показывает, как вы получаете исходную строку или strPath.
Возможно, что когда вы вводите строку поиска в случае CMD, у нее есть не-ASCII-символы, которые могут быть представлены в текущей кодовой странице, и эти значения копируются в широкие символы, а затем обратно без вреда, и убрать работы.
Когда вы вводите его в PowerShell, вы, вероятно, получаете текст в кодировке UTF-16. Когда вы копируете эти значения обратно в обычные char
s, вы не получаете ту же строку, поэтому удаление, вероятно, завершается неудачно с "file not found."
Не делай этого:
string cFileName(wsFilename.begin(), wsFilename.end());
Работа с широкими строками последовательно, без каких-либо преобразований. Если вам нужно конвертировать между широкими и узкими строками, вы должны знать кодировку и фактически перекодировать данные, а не просто скопировать их.