Re: Case sensitive filenames
On Tue, 03 Aug 2010 03:01:16 +0200, "Hans-J. Ude"
<news@s237965939.online.de> wrote:
Windows treats filenames case-insensitive by default but according to
msdn that can be changed. I created the files "TEST.txt" and "test.txt"
from Linux in my NTFS partition. Then I wrote a little test program to
read them from Windows. But in all three cases only the first file is
beeing read, as if FILE_FLAG_POSIX_SEMANTICS doesn't affect anything;
::Read(_T("TEST.txt"));
::Read(_T("test.txt"));
::Read(_T("Test.txt"));
void Read (LPTSTR name)
{
CString s;
DWORD dwRead;
char buf[100];
HANDLE h = ::CreateFile( name,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_ARCHIVE | FILE_FLAG_POSIX_SEMANTICS,
NULL );
if (h == INVALID_HANDLE_VALUE)
{
s.Format(_T("Error: %d"), GetLastError());
AfxMessageBox(s);
return;
}
ReadFile(h, buf, sizeof(buf), &dwRead, NULL);
*(buf + dwRead) = '\0';
CloseHandle(h);
}
What's wrong here?
Hans
From
http://blogs.msdn.com/b/oldnewthing/archive/2008/12/08/9182990.aspx
Gabe 8 Dec 2008 12:32 PM
Alexandre Grigoriev: I'm pretty sure that Win32 doesn't do anything to
strip the POSIX flag, otherwise why would it be in the documentation?
The kernel itself will ignore any case-sensitivity if
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session
Manager\kernel\obcaseinsensitive set to 1, however.
You probably have that set, as it is now the default probably for
security reasons. Allowing case-sensitivity allows malware to create
files that the user can't access or delete, so it is now opt-in
instead of opt-out.