Не удается переименовать файл DLL в Windows

918
pensono

Я скачал PicoScope SDK и пытаюсь переименовать одну из библиотек DLL (в соответствии с руководством программиста стр.5 ). Тем не менее, Windows 10 не позволит мне сделать это.

Я пытаюсь изменить имя файла с ps3000a.dllна PS3000a.dll.

Файл находится на USB-диске FAT32.

Есть ли причина, почему это не работает?

GIF of the problem


Кажется, он не работает через командную строку. Git Bash:

MINGW64 /f/SDK/lib $ ls | grep 3000a.dll ps3000a.dll*  MINGW64 /f/SDK/lib $ mv ps3000a.dll PS3000a.dll  MINGW64 /f/SDK/lib $ ls | grep 3000a.dll ps3000a.dll* 

PowerShell:

PS F:\SDK\lib> dir | findstr 3000a.dll -a---- 7/11/2017 3:05 PM 2803016 ps3000a.dll PS F:\SDK\lib> mv ps3000a.dll PS3000a.dll PS F:\SDK\lib> dir | findstr 3000a.dll -a---- 7/11/2017 3:05 PM 2803016 ps3000a.dll 
1
Может быть, я что-то упускаю, но ваш gif заставляет вас выглядеть так, будто вы пытаетесь изменить только «ps» на «PS»? Если так, то это не обязательно. Проводник Windows знает, что это одно и то же, поэтому оставляет его без изменений. Bill Hileman 6 лет назад 0
Windows по умолчанию не учитывает регистр. Вы пытались переименовать файл во что-то уникальное, а затем переименовать его так, как вы хотите? Mokubai 6 лет назад 2
@Mokubai Это сработало. Я даже не уверен, почему руководство программиста упоминает регистр имени pensono 6 лет назад 0
@pensono, это руководство говорит «при необходимости» ... вы считаете это необходимым? Mokubai 6 лет назад 0
@Mokubai Я не нашел это необходимым. Я пытался изменить имя, и мне показалось интересным то, что я не смог. pensono 6 лет назад 0
Справедливо. Академическое любопытство именно тогда. А как насчет того, чтобы увидеть, изменяет ли файл регистр при просмотре в командной строке или PowerShell? Я не совсем удивлен тем поведением, которое вы видите, так как это то, что я видел в прошлом, но для меня это не важно и не сложно обойти «особенность», поскольку очень мало программ, которые на самом деле работают с файлы в Windows с учетом регистра. Mokubai 6 лет назад 0
Вы пытались дать файлу точно такое же имя, но просто измените регистр имени. Конечно, это не будет работать на Windows. Ramhound 6 лет назад 0
@Mokubai тоже не работает. Я обновил вопрос стенограммами. Может ли это быть связано с тем, что файл хранится на USB-накопителе? pensono 6 лет назад 0
Каков тип файловой системы диска, на котором вы это делаете? Twisty Impersonator 6 лет назад 0
@TwistyImpersonator Это на FAT32 pensono 6 лет назад 0
Да, случается со мной на Win 10 (но не Win 7) Twisty Impersonator 6 лет назад 0
Соответствующий: https://askubuntu.com/q/391228 Twisty Impersonator 6 лет назад 0

2 ответа на вопрос

1
Twisty Impersonator

FAT32 - это нечувствительная к регистру файловая система . Как таковые два файла с одинаковыми именами, отличающиеся только регистром, не допускаются. Например, вы не можете иметь два имени файла PS3000a.dllи ps3000a.dllв одной папке.

Поэтому, кажется, что ваша попытка переименовать файл PS3000a.dllв ps3000a.dllтерпит неудачу, потому что для Windows 10 знает, что вы на самом деле не изменяя имя файла . Однако, если вы сначала переименуете файл, чтобы получить другое имя, а затем переименуйте его во второй раз, чтобы использовать тот случай, который вы намереваетесь, он работает.

Любопытно, что это не так в Windows 7. Вот операция переименования файлов в Process Monitor. Операция идентична во всех отношениях в Windows 10 и 7; ReplaceIfExistsфлаг Ложные и результат УСПЕХ на обоих:

enter image description here

Однако, сравнивая полные трассировки только в окне Windows 7, следует SetRenameInformationFileоперация с WriteFileоперацией:

Windows 7 enter image description here

Windows 10 enter image description here

Windows 10 просто не записывает обновленную информацию в файловую систему!

Windows 7 использует проводник Windows, а Windows 10 - проводник, поэтому разница в поведении Ramhound 6 лет назад 0
Я не вижу объяснения только в этом наблюдении. Тот факт, что File Explorer пришел из Windows Explorer, позволяет предположить, что любые различия будут * преднамеренными *. Twisty Impersonator 6 лет назад 0
Да, это намеренно, указывал на базовое объяснение. Ramhound 6 лет назад 0
0
headkase

Если новое имя отличается от старого только заглавными буквами, то проводник Windows покажет исходную заглавную букву. Если вы выйдете из экземпляра Explorer и снова запустите его, вернитесь в папку, и вы увидите новую заглавную букву.

Закрытие и повторное открытие проводника не сработало, хотя переименование его в «3000a.dll», а затем в «PS3000a.dll» не сработало. pensono 6 лет назад 0
По моему опыту, у меня возникла та же проблема: переименование, затем перезапуск Explorer - все, что было нужно. headkase 6 лет назад 0
Может быть, это имеет значение, что рассматриваемый файл находится на USB-накопителе pensono 6 лет назад 0
Кроме того, @pensono позволяет перейти в другую папку, а затем вернуться назад. USB не должен иметь никакого значения, хотя. headkase 6 лет назад 0
Переход в другую папку и обратно также не показывает правильное имя: / pensono 6 лет назад 0
Хорошо, что пни тогда. Меня устраивает. Windows 10 Pro x64 здесь. headkase 6 лет назад 0