Переименуйте файл в Win32, чтобы он назывался только с заглавными буквами - PullRequest
1 голос
/ 28 апреля 2011

Кто-нибудь знает чистое решение Win32 для переименования файла и только изменения его заглавных букв, которое не включает промежуточное переименование в другое имя или специальные привилегии (например, резервное копирование, восстановление).

Поскольку подсистема Win32Как правило, два имени файлов, различающихся только заглавными буквами, одинаковы. Я не смог найти решения этой проблемы.

Ответы [ 4 ]

5 голосов
/ 28 апреля 2011

Тестовая программа, которую я создал с MoveFile API, похоже, работает. Так же, как и команда rename в cmd.exe. Что вы пробовали и какую ошибку вы получаете?

Это не имеет значения, но дальнейшее тестирование показывает, что переименование длинного имени файла таким способом работает, но, к слову, изменит короткое имя файла (например, чередуя ~1 и ~2).

2 голосов
/ 28 апреля 2011

Просто используйте обычный MoveFile API. Этот вызов, вероятно, просто превращается в ZwSetInformationFile (..., FileRenameInformation, ...) Документы для FILE_RENAME_INFORMATION утверждают, что вам необходим доступ DELETE, и файл не может быть заблокирован и т. Д., Но эти ограничения, вероятно, будут применяться к другим решениям также.

0 голосов
/ 02 сентября 2011

Пока ваш файл не нужен сразу другой программе, вы можете использовать мое решение.

Когда вы переименуете файл, используйте заглавные буквы и удалите последнюю букву. Затем переименуйте снова и верните письмо.

:)

0 голосов
/ 29 апреля 2011

Я не верю, что есть способ предоставить два файла с одинаковыми именами, которые отличаются только написанием в подсистеме Win32. Даже если бы каким-то образом вы смогли создать эти файлы, наиболее вероятным результатом было бы то, что был бы доступен только один файл - победив цель остаться в Win32.

Если вы хотите перейти на собственный слой, вы можете создать файл с помощью NtCreateFile и InitializeObjectAttributes без OBJ_CASE_INSENSITIVE или вы можете дополнить конец дополнительными пробелами (если вы дополняете дополнительными пробелами, файл будет недоступен Win32 дос пути). Смотрите здесь: http://www.osronline.com/ddkx/kmarch/k109_66uq.htm. Я почти уверен, что вы уже знали, но я включил его, если вы не знали.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...