NTFSパーティションで同じ名前で大文字と小文字が異なる2つのファイルがWindowsで検出された場合、デフォルトで予期される動作は何ですか?


16

LinuxからNTFSパーティションに2つのファイルを簡単に書き込むことができ、両方のファイルに同じ文字が含まれているが大文字と小文字が異なる場合(たとえば、some_file.txtとSome_File.txt)があります。Linuxはそれらを区別します。

Windowsはこれらをどのように処理しますか?


1
個人的には、関与するすべての要因のために、それは未定義の動作を引き起こすと言うだけです。この場合、Windowsが動作を定義しないと、定義上、定義されていません。Windows が動作を定義する場合、すべてのプログラムが一貫してこれを処理することを真剣に疑うので、未定義の動作として扱います。
jpfx1342

回答:


20

MS-DOS、WOW、およびWin32パーソナリティは、最初に一致したファイルを返します。一部のアプリケーションやAPIに関しては、大文字鈍感にされ強制(例えば、MS-DOSはそれに対処することはできません)。POSIXパーソナリティ区別され、デフォルトで大文字と小文字が区別されます(たとえば、UNIXツールがインストールされている場合)。ネイティブのWindows NTコマンドプロンプトには両方が表示されますが、設定(ObCaseInsensitive)とツールが使用するAPIによっては、最初に見つかったものにのみアクセスします。

参照のMicrosoft TechNetの記事のファイル名は、NTFSボリューム(KB100625)の大文字と小文字が区別され、また、様々なNTのサブシステムで大文字と小文字の区別の機微の詳細な議論:Windowsでの理解大文字と小文字の区別:obcaseinsensitive、FILE_CASE_SENSITIVE_SEARCH

特に、ObCaseInsensitive値は、NTオブジェクトマネージャ全体の大文字と小文字の区別を制御します。

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\ dword:ObCaseInsensitive
  • 0に設定すると、オブジェクトマネージャーは大文字と小文字を区別するモードで実行されます。
  • 1に設定すると、オブジェクトマネージャーは大文字と小文字を区別しないモードで実行されます。
  • 指定しない場合、NT 5.1(Windows XP)以降のエディションはデフォルトで大文字と小文字を区別しないモードで実行されます。
  • obcaseinsensitiveは、大文字と小文字を区別するモードで常に実行されるNT 5.0(Windows 2000)および以前のバージョンのNTでは意味がありません。

Cygwin 、この時点で基本的/効果的な大文字と小文字の区別の設定を選択する必要があります。

関連するスーパーユーザーの質問Windows 7でフォルダー名の大文字と小文字の区別を構成する方法は?TechNetの記事「ファイル名とフォルダー名の大文字と小文字の区別を構成する」では、この状況を定期的に処理する必要がある場合にNTでファイルとフォルダーの大文字と小文字を完全に有効にする方法について詳しく説明しています。

大文字と小文字を区別するツールに関する追加リソース/ NTFS / NFSボリュームへのアクセス:


One.txtとONE.txtの2つのファイルが存在する場合、one.txtを指定すると「最初に一致する」ファイルはどれですか?「最初に一致するファイル」となるルールはありますか?
trusktr

1
これはおそらく、ディレクトリ内の内部ファイルの順序に基づいています。正確に知りたい場合は、明日試してみます。
ダニエルB

2
どちらが最初であるかは、ディレクトリに表示される順序によって純粋に決定されます。これは必ずしもそれらが作成される順序ではありません。また、ファイルが変更されるか、ディレクトリが更新されると、変更される可能性があります。(Chkdsk、デフラグ、削除、そのフォルダー内の他のファイルの移動はすべて順序を変更できます。)
トニー

1
@trusktrまあ、結局のところ、何らかの順序があるようです。複数のファイルセットを作成し(NTFS-3Gを使用)、それぞれ大文字と小文字が異なり、順序も異なります。Windows(正確にはメモ帳)、作成順序に関係なく、常に大文字で始まるファイルを選択します。moreただし、疑問符を返すだけです。
ダニエルB

1
@trusktrディレクトリのB +ツリーのINDXエントリの順序に従います。このツリーは設計ごとにソートされますが、NTFSドライバーによって若干異なる場合があります。(OnCaseInsensitive = 0、Win32 / DOS / WOW API)は、指定された名前とINDXエントリ名の(ソートされた)ツリーを歩くときに最初に一致します。NTFSは序数比較を使用するため、大文字常に小文字よりも先に見つける必要があります。(AZ = 0041-005A、az = 0061-007A)
Maxx

2

そうではありません。大文字と小文字の違いを考慮しますが、それ以外はまったく同じ名前を同じファイルと見なします。

これをテストするには、すべて小文字のファイルを作成してから、大文字を1文字だけ使用して別のファイルを作成し、文句を言います。


現在、それをテストする環境がありません。現時点ではOS Xしかありません。何が起こるのか説明していただけますか?私の最初の推測は、Windowsが何らかの基準(たとえば、小文字を優先する字句順、またはその逆)で読み書きするファイルを(おそらく誤って)選択することです。または、どのファイルも操作できませんか?
trusktr

1
@trusktrシステムは、関連するアプリケーションまたはコードに応じて、ファイルがすでに存在することを訴えます。これは黙って無視され、単に既存のファイルを上書きします。以下のようjpfx1342はコメントし、この問題は、未定義の動作として扱われるべきです。
ケーシー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.