2011-04-28 3 views
1

파일 이름을 바꾸고 대문자 변경 만하는 순수한 Win32 솔루션은 중간 이름 변경이나 특수 권한 (예 : 백업, 복원)을 포함하지 않습니다. .Win32의 파일 이름을 대문자 만 다른 이름으로 바꿉니다.

일반적으로 Win32 하위 시스템은 대문자 만 다른 두 개의 파일 이름을 동일하게 간주하므로 문제에 대한 해결책을 찾지 못했습니다.

답변

5

MoveFile API로 만든 테스트 프로그램이 작동하는 것 같습니다. cmd.exe에서 rename 명령도 마찬가지입니다. 무엇을 시도 했습니까? 어떤 오류가 있습니까?

이것은 관련이 없지만이 방법으로 긴 파일 이름의 이름을 바꿔도 작동하지만 짧은 파일 이름 (예 : ~1~2 번으로 변경)이 우연히 변경된다는 것을 보여줍니다.

+0

어떤 시스템을 사용해 보셨습니까? 'ERROR_ALREADY_EXISTS'이 나왔습니다. – 0xC0000022L

+0

Windows 7 x64. FAT32와 NTFS 모두에서 시도했습니다. – Random832

+0

저는 Windows 5.x에 있지만 근본적인 차이점이 있다고 생각하지 않습니다. 또한 나는 거의 모든면에서 Windows 7에서 동일한 오류가 발생했다고 확신합니다 (독점적으로 NTFS로 작업 할지라도). 현재 일부 필터 드라이버를 의심하고 있습니다. 더 조사해야합니다. 그래도 독립 결과를 가져 주셔서 감사합니다. – 0xC0000022L

2

일반 MoveFile API 만 사용하십시오. 그 호출은 아마도 ZwSetInformationFile (..., FileRenameInformation, ...)으로 바뀔 것입니다. FILE_RENAME_INFORMATION에 대한 문서에서는 DELETE 액세스가 필요하고 파일을 잠글 수 없다고 말합니다. 그러나 이러한 제한은 다른 솔루션에도 적용됩니다.

+0

감사합니다. 네이티브 API와의 관계를 알고 있습니다. 그리고 그것은 실제로 그것이 내부적으로하는 일입니다. 그러나, 나는'ERROR_ALREADY_EXISTS' 시간과 시간을 다시 보았습니다. 특정 시스템이어야하거나 뭔가를 필터링하는 FSFD가 있어야합니다. – 0xC0000022L

0

Win32 하위 시스템의 맞춤법이 다른 동일한 이름을 가진 두 파일을 노출하는 방법이 있다고 생각하지 않습니다. 이러한 파일을 어떻게 만들 수 있었는지 알 수 있겠지만 가장 가능성있는 결과는 하나의 파일 만 액세스 할 수 있다는 것입니다. 즉 Win32에서 soley를 사용하는 목적을 무효화하는 것입니다.

네이티브 레이어로 이동하려면 OBJ_CASE_INSENSITIVE가 없거나 NtCreateFile 및 InitializeObjectAttributes가없는 파일을 만들거나 여분의 공백을 추가 할 수 있습니다 (공백을 추가하면 파일에 액세스 할 수 없습니다. Win32 dos 경로에서). 여기를 참조하십시오 : http://www.osronline.com/ddkx/kmarch/k109_66uq.htm. 나는 당신이 이미 알고 있다고 확신하지만, 당신이 몰랐을 때 그것을 포함 시켰습니다.

+0

안녕하세요, 질문을 잘못 이해하셨습니다. 나는 대소 문자 차이 만 공존해야하는 두 개의 파일을 만들고 싶지 않습니다. 중간 단계없이 대문자의 한 형식을 다른 형식으로 바꾸고 싶습니다. 그러나 노력에 감사드립니다. – 0xC0000022L

0

파일이 다른 프로그램에서 즉시 필요하지 않으면 내 솔루션을 사용할 수 있습니다.

파일의 이름을 바꾸고 대문자로하고 마지막 문자를 삭제할 때. 그런 다음 다시 이름을 바꾸고 문자를 반환하십시오.

:)

+1

그 질문이 피하고자하는 질문과 정확하게 일치하지 않습니까 ("... 다른 이름으로 중간 이름 변경이 필요하지 않습니다") – Flexo

관련 문제