Home > Latest topics

Latest topics 近況報告

たまに18歳未満の人や心臓の弱い人にはお勧めできない情報が含まれることもあるかもしれない、甘くなくて酸っぱくてしょっぱいチラシの裏。RSSによる簡単な更新情報を利用したりすると、ハッピーになるかも知れませんしそうでないかも知れません。

萌えるふぉくす子さんだば子本制作プロジェクトの動向はもえじら組ブログで。

宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能! シス管系女子って何!? - 「シス管系女子」特設サイト

Page 1/246: 1 2 3 4 5 6 7 8 9 »

WSLでフォルダーを作るとWindowsでNTFSなパーティションでも大文字小文字が区別される落とし穴がある - Dec 23, 2020

業務でWindowsネイティブのアプリケーションに関わることになって、Visual Studio用のプロジェクトになってるリポジトリをcloneしてきてビルドしようとしたら、fatal error C1083: コンパイラの中間生成物 ファイルを開けません。(ファイルパス):No such file or directory とエラーが出てビルドできなくて、ドハマリしてた。Windowsのエクスプローラで見ても確かにその位置にファイルはあるのに。何故?

他の人を巻き込んで調査に協力してもらって最終的に分かったことは、ファイルシステムがNTFSのパーティションでもパスの大文字小文字が区別される状態になっていることがあり、エラーメッセージに現れていたパス(すべて小文字)では実際のファイル(大文字小文字混在)にアクセスできなかったのが原因だということだった。パスの大文字小文字を区別しない状態に設定を修正したら、問題は解決した。

 

何故そんな状態が発生していたかというと、今使っている作業環境(Windows 10)に引っ越すにあたり、旧環境から必要なファイルをまとめて持ってくるために、WSL1上のrsyncを使ったのが原因だったようだ。Per-directory case sensitivity and WSL | Windows Command Lineという記事によると、This option controls which directories are treated as case sensitive, and whether new directories created with WSL will have the flag set.((DevFsのcaseオプションは)ディレクトリー名の大文字小文字の区別を制御し、WSLで新たに作られたディレクトリーは大文字小文字を区別するフラグがセットされた状態となる)とあった。PowerShellで当該フォルダに cd して fsutil.exe file queryCaseSensitiveInfo . と実行してみると、確かに問題のcloneされたリポジトリのディレクトリーはパスの大文字小文字が区別される状態になっていた。

この状態は fsutil.exe というコマンドを使って、fsutil.exe file setcasesensitiveinfo . disable とすれば解除できるそうなのだけれど、残念ながらこの fsutil.exe は再帰的な実行に対応していないため、問題を解決しようと思うと、cloneしたリポジトリ配下のファイルやディレクトリーすべてにこのコマンド列を実行しなくてはならない。それはあまりにかったるいしヒューマンエラーも起こりそうだったので、既存の質問に寄せられていた回答に倣って、PowerShellで以下のようなコマンド列を実行して再帰的にディレクトリーの設定を修正することにした。

(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ disable}

普段はファイル名に大文字小文字を混在させないようになるべく意識しているせいで、この状態が発生している事に気付いてなかった。メモ帳や秀丸エディタなどのWindowsアプリケーションでエラーメッセージに現れていたパスのファイルを開こうとして、確かにファイルはあるのにファイルが見つからないと言われる、という現象が調査の過程で発生して、それでやっと気が付いたんだった。自分で知らないうちに掘っていた落とし穴に、掘ったことにも気付かず自分でハマってしまった。

という学びを得た話をWSLアドベントカレンダー2020に書けばよかったんだけど、もうすべて埋まってたので、記録のためにここに放流しておく。

WSLでフォルダーを作るとWindowsでNTFSなパーティションでも大文字小文字が区別される落とし穴がある - Jan 01, 1970

業務でWindowsネイティブのアプリケーションに関わることになって、Visual Studio用のプロジェクトになってるリポジトリをcloneしてきてビルドしようとしたら、fatal error C1083: コンパイラの中間生成物 ファイルを開けません。(ファイルパス):No such file or directory とエラーが出てビルドできなくて、ドハマリしてた。Windowsのエクスプローラで見ても確かにその位置にファイルはあるのに。何故?

他の人を巻き込んで調査に協力してもらって最終的に分かったことは、ファイルシステムがNTFSのパーティションでもパスの大文字小文字が区別される状態になっていることがあり、エラーメッセージに現れていたパス(すべて小文字)では実際のファイル(大文字小文字混在)にアクセスできなかったのが原因だということだった。パスの大文字小文字を区別しない状態に設定を修正したら、問題は解決した。

 

何故そんな状態が発生していたかというと、今使っている作業環境(Windows 10)に引っ越すにあたり、旧環境から必要なファイルをまとめて持ってくるために、WSL1上のrsyncを使ったのが原因だったようだ。Per-directory case sensitivity and WSL | Windows Command Lineという記事によると、This option controls which directories are treated as case sensitive, and whether new directories created with WSL will have the flag set.((DevFsのcaseオプションは)ディレクトリー名の大文字小文字の区別を制御し、WSLで新たに作られたディレクトリーは大文字小文字を区別するフラグがセットされた状態となる)とあった。PowerShellで当該フォルダに cd して fsutil.exe file queryCaseSensitiveInfo . と実行してみると、確かに問題のcloneされたリポジトリのディレクトリーはパスの大文字小文字が区別される状態になっていた。

この状態は fsutil.exe というコマンドを使って、fsutil.exe file setcasesensitiveinfo . disable とすれば解除できるそうなのだけれど、残念ながらこの fsutil.exe は再帰的な実行に対応していないため、問題を解決しようと思うと、cloneしたリポジトリ配下のファイルやディレクトリーすべてにこのコマンド列を実行しなくてはならない。それはあまりにかったるいしヒューマンエラーも起こりそうだったので、既存の質問に寄せられていた回答に倣って、PowerShellで以下のようなコマンド列を実行して再帰的にディレクトリーの設定を修正することにした。

(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ disable}

普段はファイル名に大文字小文字を混在させないようになるべく意識しているせいで、この状態が発生している事に気付いてなかった。メモ帳や秀丸エディタなどのWindowsアプリケーションでエラーメッセージに現れていたパスのファイルを開こうとして、確かにファイルはあるのにファイルが見つからないと言われる、という現象が調査の過程で発生して、それでやっと気が付いたんだった。自分で知らないうちに掘っていた落とし穴に、掘ったことにも気付かず自分でハマってしまった。

という学びを得た話をWSLアドベントカレンダー2020に書けばよかったんだけど、もうすべて埋まってたので、記録のためにここに放流しておく。

WSLでフォルダーを作るとWindowsでNTFSなパーティションでも大文字小文字が区別される落とし穴がある - Jan 01, 1970

業務でWindowsネイティブのアプリケーションに関わることになって、Visual Studio用のプロジェクトになってるリポジトリをcloneしてきてビルドしようとしたら、fatal error C1083: コンパイラの中間生成物 ファイルを開けません。(ファイルパス):No such file or directory とエラーが出てビルドできなくて、ドハマリしてた。Windowsのエクスプローラで見ても確かにその位置にファイルはあるのに。何故?

他の人を巻き込んで調査に協力してもらって最終的に分かったことは、ファイルシステムがNTFSのパーティションでもパスの大文字小文字が区別される状態になっていることがあり、エラーメッセージに現れていたパス(すべて小文字)では実際のファイル(大文字小文字混在)にアクセスできなかったのが原因だということだった。パスの大文字小文字を区別しない状態に設定を修正したら、問題は解決した。

 

何故そんな状態が発生していたかというと、今使っている作業環境(Windows 10)に引っ越すにあたり、旧環境から必要なファイルをまとめて持ってくるために、WSL1上のrsyncを使ったのが原因だったようだ。Per-directory case sensitivity and WSL | Windows Command Lineという記事によると、This option controls which directories are treated as case sensitive, and whether new directories created with WSL will have the flag set.((DevFsのcaseオプションは)ディレクトリー名の大文字小文字の区別を制御し、WSLで新たに作られたディレクトリーは大文字小文字を区別するフラグがセットされた状態となる)とあった。PowerShellで当該フォルダに cd して fsutil.exe file queryCaseSensitiveInfo . と実行してみると、確かに問題のcloneされたリポジトリのディレクトリーはパスの大文字小文字が区別される状態になっていた。

この状態は fsutil.exe というコマンドを使って、fsutil.exe file setcasesensitiveinfo . disable とすれば解除できるそうなのだけれど、残念ながらこの fsutil.exe は再帰的な実行に対応していないため、問題を解決しようと思うと、cloneしたリポジトリ配下のファイルやディレクトリーすべてにこのコマンド列を実行しなくてはならない。それはあまりにかったるいしヒューマンエラーも起こりそうだったので、既存の質問に寄せられていた回答に倣って、PowerShellで以下のようなコマンド列を実行して再帰的にディレクトリーの設定を修正することにした。

(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ disable}

普段はファイル名に大文字小文字を混在させないようになるべく意識しているせいで、この状態が発生している事に気付いてなかった。メモ帳や秀丸エディタなどのWindowsアプリケーションでエラーメッセージに現れていたパスのファイルを開こうとして、確かにファイルはあるのにファイルが見つからないと言われる、という現象が調査の過程で発生して、それでやっと気が付いたんだった。自分で知らないうちに掘っていた落とし穴に、掘ったことにも気付かず自分でハマってしまった。

という学びを得た話をWSLアドベントカレンダー2020に書けばよかったんだけど、もうすべて埋まってたので、記録のためにここに放流しておく。

WSLでフォルダーを作るとWindowsでNTFSなパーティションでも大文字小文字が区別される落とし穴がある - Jan 01, 1970

業務でWindowsネイティブのアプリケーションに関わることになって、Visual Studio用のプロジェクトになってるリポジトリをcloneしてきてビルドしようとしたら、fatal error C1083: コンパイラの中間生成物 ファイルを開けません。(ファイルパス):No such file or directory とエラーが出てビルドできなくて、ドハマリしてた。Windowsのエクスプローラで見ても確かにその位置にファイルはあるのに。何故?

他の人を巻き込んで調査に協力してもらって最終的に分かったことは、ファイルシステムがNTFSのパーティションでもパスの大文字小文字が区別される状態になっていることがあり、エラーメッセージに現れていたパス(すべて小文字)では実際のファイル(大文字小文字混在)にアクセスできなかったのが原因だということだった。パスの大文字小文字を区別しない状態に設定を修正したら、問題は解決した。

 

何故そんな状態が発生していたかというと、今使っている作業環境(Windows 10)に引っ越すにあたり、旧環境から必要なファイルをまとめて持ってくるために、WSL1上のrsyncを使ったのが原因だったようだ。Per-directory case sensitivity and WSL | Windows Command Lineという記事によると、This option controls which directories are treated as case sensitive, and whether new directories created with WSL will have the flag set.((DevFsのcaseオプションは)ディレクトリー名の大文字小文字の区別を制御し、WSLで新たに作られたディレクトリーは大文字小文字を区別するフラグがセットされた状態となる)とあった。PowerShellで当該フォルダに cd して fsutil.exe file queryCaseSensitiveInfo . と実行してみると、確かに問題のcloneされたリポジトリのディレクトリーはパスの大文字小文字が区別される状態になっていた。

この状態は fsutil.exe というコマンドを使って、fsutil.exe file setcasesensitiveinfo . disable とすれば解除できるそうなのだけれど、残念ながらこの fsutil.exe は再帰的な実行に対応していないため、問題を解決しようと思うと、cloneしたリポジトリ配下のファイルやディレクトリーすべてにこのコマンド列を実行しなくてはならない。それはあまりにかったるいしヒューマンエラーも起こりそうだったので、既存の質問に寄せられていた回答に倣って、PowerShellで以下のようなコマンド列を実行して再帰的にディレクトリーの設定を修正することにした。

(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ disable}

普段はファイル名に大文字小文字を混在させないようになるべく意識しているせいで、この状態が発生している事に気付いてなかった。メモ帳や秀丸エディタなどのWindowsアプリケーションでエラーメッセージに現れていたパスのファイルを開こうとして、確かにファイルはあるのにファイルが見つからないと言われる、という現象が調査の過程で発生して、それでやっと気が付いたんだった。自分で知らないうちに掘っていた落とし穴に、掘ったことにも気付かず自分でハマってしまった。

という学びを得た話をWSLアドベントカレンダー2020に書けばよかったんだけど、もうすべて埋まってたので、記録のためにここに放流しておく。

WSLでフォルダーを作るとWindowsでNTFSなパーティションでも大文字小文字が区別される落とし穴がある - Jan 01, 1970

業務でWindowsネイティブのアプリケーションに関わることになって、Visual Studio用のプロジェクトになってるリポジトリをcloneしてきてビルドしようとしたら、fatal error C1083: コンパイラの中間生成物 ファイルを開けません。(ファイルパス):No such file or directory とエラーが出てビルドできなくて、ドハマリしてた。Windowsのエクスプローラで見ても確かにその位置にファイルはあるのに。何故?

他の人を巻き込んで調査に協力してもらって最終的に分かったことは、ファイルシステムがNTFSのパーティションでもパスの大文字小文字が区別される状態になっていることがあり、エラーメッセージに現れていたパス(すべて小文字)では実際のファイル(大文字小文字混在)にアクセスできなかったのが原因だということだった。パスの大文字小文字を区別しない状態に設定を修正したら、問題は解決した。

 

何故そんな状態が発生していたかというと、今使っている作業環境(Windows 10)に引っ越すにあたり、旧環境から必要なファイルをまとめて持ってくるために、WSL1上のrsyncを使ったのが原因だったようだ。Per-directory case sensitivity and WSL | Windows Command Lineという記事によると、This option controls which directories are treated as case sensitive, and whether new directories created with WSL will have the flag set.((DevFsのcaseオプションは)ディレクトリー名の大文字小文字の区別を制御し、WSLで新たに作られたディレクトリーは大文字小文字を区別するフラグがセットされた状態となる)とあった。PowerShellで当該フォルダに cd して fsutil.exe file queryCaseSensitiveInfo . と実行してみると、確かに問題のcloneされたリポジトリのディレクトリーはパスの大文字小文字が区別される状態になっていた。

この状態は fsutil.exe というコマンドを使って、fsutil.exe file setcasesensitiveinfo . disable とすれば解除できるそうなのだけれど、残念ながらこの fsutil.exe は再帰的な実行に対応していないため、問題を解決しようと思うと、cloneしたリポジトリ配下のファイルやディレクトリーすべてにこのコマンド列を実行しなくてはならない。それはあまりにかったるいしヒューマンエラーも起こりそうだったので、既存の質問に寄せられていた回答に倣って、PowerShellで以下のようなコマンド列を実行して再帰的にディレクトリーの設定を修正することにした。

(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ disable}

普段はファイル名に大文字小文字を混在させないようになるべく意識しているせいで、この状態が発生している事に気付いてなかった。メモ帳や秀丸エディタなどのWindowsアプリケーションでエラーメッセージに現れていたパスのファイルを開こうとして、確かにファイルはあるのにファイルが見つからないと言われる、という現象が調査の過程で発生して、それでやっと気が付いたんだった。自分で知らないうちに掘っていた落とし穴に、掘ったことにも気付かず自分でハマってしまった。

という学びを得た話をWSLアドベントカレンダー2020に書けばよかったんだけど、もうすべて埋まってたので、記録のためにここに放流しておく。

WSLでフォルダーを作るとWindowsでNTFSなパーティションでも大文字小文字が区別される落とし穴がある - Jan 01, 1970

業務でWindowsネイティブのアプリケーションに関わることになって、Visual Studio用のプロジェクトになってるリポジトリをcloneしてきてビルドしようとしたら、fatal error C1083: コンパイラの中間生成物 ファイルを開けません。(ファイルパス):No such file or directory とエラーが出てビルドできなくて、ドハマリしてた。Windowsのエクスプローラで見ても確かにその位置にファイルはあるのに。何故?

他の人を巻き込んで調査に協力してもらって最終的に分かったことは、ファイルシステムがNTFSのパーティションでもパスの大文字小文字が区別される状態になっていることがあり、エラーメッセージに現れていたパス(すべて小文字)では実際のファイル(大文字小文字混在)にアクセスできなかったのが原因だということだった。パスの大文字小文字を区別しない状態に設定を修正したら、問題は解決した。

 

何故そんな状態が発生していたかというと、今使っている作業環境(Windows 10)に引っ越すにあたり、旧環境から必要なファイルをまとめて持ってくるために、WSL1上のrsyncを使ったのが原因だったようだ。Per-directory case sensitivity and WSL | Windows Command Lineという記事によると、This option controls which directories are treated as case sensitive, and whether new directories created with WSL will have the flag set.((DevFsのcaseオプションは)ディレクトリー名の大文字小文字の区別を制御し、WSLで新たに作られたディレクトリーは大文字小文字を区別するフラグがセットされた状態となる)とあった。PowerShellで当該フォルダに cd して fsutil.exe file queryCaseSensitiveInfo . と実行してみると、確かに問題のcloneされたリポジトリのディレクトリーはパスの大文字小文字が区別される状態になっていた。

この状態は fsutil.exe というコマンドを使って、fsutil.exe file setcasesensitiveinfo . disable とすれば解除できるそうなのだけれど、残念ながらこの fsutil.exe は再帰的な実行に対応していないため、問題を解決しようと思うと、cloneしたリポジトリ配下のファイルやディレクトリーすべてにこのコマンド列を実行しなくてはならない。それはあまりにかったるいしヒューマンエラーも起こりそうだったので、既存の質問に寄せられていた回答に倣って、PowerShellで以下のようなコマンド列を実行して再帰的にディレクトリーの設定を修正することにした。

(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ disable}

普段はファイル名に大文字小文字を混在させないようになるべく意識しているせいで、この状態が発生している事に気付いてなかった。メモ帳や秀丸エディタなどのWindowsアプリケーションでエラーメッセージに現れていたパスのファイルを開こうとして、確かにファイルはあるのにファイルが見つからないと言われる、という現象が調査の過程で発生して、それでやっと気が付いたんだった。自分で知らないうちに掘っていた落とし穴に、掘ったことにも気付かず自分でハマってしまった。

という学びを得た話をWSLアドベントカレンダー2020に書けばよかったんだけど、もうすべて埋まってたので、記録のためにここに放流しておく。

WSLでフォルダーを作るとWindowsでNTFSなパーティションでも大文字小文字が区別される落とし穴がある - Jan 01, 1970

業務でWindowsネイティブのアプリケーションに関わることになって、Visual Studio用のプロジェクトになってるリポジトリをcloneしてきてビルドしようとしたら、fatal error C1083: コンパイラの中間生成物 ファイルを開けません。(ファイルパス):No such file or directory とエラーが出てビルドできなくて、ドハマリしてた。Windowsのエクスプローラで見ても確かにその位置にファイルはあるのに。何故?

他の人を巻き込んで調査に協力してもらって最終的に分かったことは、ファイルシステムがNTFSのパーティションでもパスの大文字小文字が区別される状態になっていることがあり、エラーメッセージに現れていたパス(すべて小文字)では実際のファイル(大文字小文字混在)にアクセスできなかったのが原因だということだった。パスの大文字小文字を区別しない状態に設定を修正したら、問題は解決した。

 

何故そんな状態が発生していたかというと、今使っている作業環境(Windows 10)に引っ越すにあたり、旧環境から必要なファイルをまとめて持ってくるために、WSL1上のrsyncを使ったのが原因だったようだ。Per-directory case sensitivity and WSL | Windows Command Lineという記事によると、This option controls which directories are treated as case sensitive, and whether new directories created with WSL will have the flag set.((DevFsのcaseオプションは)ディレクトリー名の大文字小文字の区別を制御し、WSLで新たに作られたディレクトリーは大文字小文字を区別するフラグがセットされた状態となる)とあった。PowerShellで当該フォルダに cd して fsutil.exe file queryCaseSensitiveInfo . と実行してみると、確かに問題のcloneされたリポジトリのディレクトリーはパスの大文字小文字が区別される状態になっていた。

この状態は fsutil.exe というコマンドを使って、fsutil.exe file setcasesensitiveinfo . disable とすれば解除できるそうなのだけれど、残念ながらこの fsutil.exe は再帰的な実行に対応していないため、問題を解決しようと思うと、cloneしたリポジトリ配下のファイルやディレクトリーすべてにこのコマンド列を実行しなくてはならない。それはあまりにかったるいしヒューマンエラーも起こりそうだったので、既存の質問に寄せられていた回答に倣って、PowerShellで以下のようなコマンド列を実行して再帰的にディレクトリーの設定を修正することにした。

(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ disable}

普段はファイル名に大文字小文字を混在させないようになるべく意識しているせいで、この状態が発生している事に気付いてなかった。メモ帳や秀丸エディタなどのWindowsアプリケーションでエラーメッセージに現れていたパスのファイルを開こうとして、確かにファイルはあるのにファイルが見つからないと言われる、という現象が調査の過程で発生して、それでやっと気が付いたんだった。自分で知らないうちに掘っていた落とし穴に、掘ったことにも気付かず自分でハマってしまった。

という学びを得た話をWSLアドベントカレンダー2020に書けばよかったんだけど、もうすべて埋まってたので、記録のためにここに放流しておく。

WSLでフォルダーを作るとWindowsでNTFSなパーティションでも大文字小文字が区別される落とし穴がある - Jan 01, 1970

業務でWindowsネイティブのアプリケーションに関わることになって、Visual Studio用のプロジェクトになってるリポジトリをcloneしてきてビルドしようとしたら、fatal error C1083: コンパイラの中間生成物 ファイルを開けません。(ファイルパス):No such file or directory とエラーが出てビルドできなくて、ドハマリしてた。Windowsのエクスプローラで見ても確かにその位置にファイルはあるのに。何故?

他の人を巻き込んで調査に協力してもらって最終的に分かったことは、ファイルシステムがNTFSのパーティションでもパスの大文字小文字が区別される状態になっていることがあり、エラーメッセージに現れていたパス(すべて小文字)では実際のファイル(大文字小文字混在)にアクセスできなかったのが原因だということだった。パスの大文字小文字を区別しない状態に設定を修正したら、問題は解決した。

 

何故そんな状態が発生していたかというと、今使っている作業環境(Windows 10)に引っ越すにあたり、旧環境から必要なファイルをまとめて持ってくるために、WSL1上のrsyncを使ったのが原因だったようだ。Per-directory case sensitivity and WSL | Windows Command Lineという記事によると、This option controls which directories are treated as case sensitive, and whether new directories created with WSL will have the flag set.((DevFsのcaseオプションは)ディレクトリー名の大文字小文字の区別を制御し、WSLで新たに作られたディレクトリーは大文字小文字を区別するフラグがセットされた状態となる)とあった。PowerShellで当該フォルダに cd して fsutil.exe file queryCaseSensitiveInfo . と実行してみると、確かに問題のcloneされたリポジトリのディレクトリーはパスの大文字小文字が区別される状態になっていた。

この状態は fsutil.exe というコマンドを使って、fsutil.exe file setcasesensitiveinfo . disable とすれば解除できるそうなのだけれど、残念ながらこの fsutil.exe は再帰的な実行に対応していないため、問題を解決しようと思うと、cloneしたリポジトリ配下のファイルやディレクトリーすべてにこのコマンド列を実行しなくてはならない。それはあまりにかったるいしヒューマンエラーも起こりそうだったので、既存の質問に寄せられていた回答に倣って、PowerShellで以下のようなコマンド列を実行して再帰的にディレクトリーの設定を修正することにした。

(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ disable}

普段はファイル名に大文字小文字を混在させないようになるべく意識しているせいで、この状態が発生している事に気付いてなかった。メモ帳や秀丸エディタなどのWindowsアプリケーションでエラーメッセージに現れていたパスのファイルを開こうとして、確かにファイルはあるのにファイルが見つからないと言われる、という現象が調査の過程で発生して、それでやっと気が付いたんだった。自分で知らないうちに掘っていた落とし穴に、掘ったことにも気付かず自分でハマってしまった。

という学びを得た話をWSLアドベントカレンダー2020に書けばよかったんだけど、もうすべて埋まってたので、記録のためにここに放流しておく。

WSLでフォルダーを作るとWindowsでNTFSなパーティションでも大文字小文字が区別される落とし穴がある - Jan 01, 1970

業務でWindowsネイティブのアプリケーションに関わることになって、Visual Studio用のプロジェクトになってるリポジトリをcloneしてきてビルドしようとしたら、fatal error C1083: コンパイラの中間生成物 ファイルを開けません。(ファイルパス):No such file or directory とエラーが出てビルドできなくて、ドハマリしてた。Windowsのエクスプローラで見ても確かにその位置にファイルはあるのに。何故?

他の人を巻き込んで調査に協力してもらって最終的に分かったことは、ファイルシステムがNTFSのパーティションでもパスの大文字小文字が区別される状態になっていることがあり、エラーメッセージに現れていたパス(すべて小文字)では実際のファイル(大文字小文字混在)にアクセスできなかったのが原因だということだった。パスの大文字小文字を区別しない状態に設定を修正したら、問題は解決した。

 

何故そんな状態が発生していたかというと、今使っている作業環境(Windows 10)に引っ越すにあたり、旧環境から必要なファイルをまとめて持ってくるために、WSL1上のrsyncを使ったのが原因だったようだ。Per-directory case sensitivity and WSL | Windows Command Lineという記事によると、This option controls which directories are treated as case sensitive, and whether new directories created with WSL will have the flag set.((DevFsのcaseオプションは)ディレクトリー名の大文字小文字の区別を制御し、WSLで新たに作られたディレクトリーは大文字小文字を区別するフラグがセットされた状態となる)とあった。PowerShellで当該フォルダに cd して fsutil.exe file queryCaseSensitiveInfo . と実行してみると、確かに問題のcloneされたリポジトリのディレクトリーはパスの大文字小文字が区別される状態になっていた。

この状態は fsutil.exe というコマンドを使って、fsutil.exe file setcasesensitiveinfo . disable とすれば解除できるそうなのだけれど、残念ながらこの fsutil.exe は再帰的な実行に対応していないため、問題を解決しようと思うと、cloneしたリポジトリ配下のファイルやディレクトリーすべてにこのコマンド列を実行しなくてはならない。それはあまりにかったるいしヒューマンエラーも起こりそうだったので、既存の質問に寄せられていた回答に倣って、PowerShellで以下のようなコマンド列を実行して再帰的にディレクトリーの設定を修正することにした。

(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ disable}

普段はファイル名に大文字小文字を混在させないようになるべく意識しているせいで、この状態が発生している事に気付いてなかった。メモ帳や秀丸エディタなどのWindowsアプリケーションでエラーメッセージに現れていたパスのファイルを開こうとして、確かにファイルはあるのにファイルが見つからないと言われる、という現象が調査の過程で発生して、それでやっと気が付いたんだった。自分で知らないうちに掘っていた落とし穴に、掘ったことにも気付かず自分でハマってしまった。

という学びを得た話をWSLアドベントカレンダー2020に書けばよかったんだけど、もうすべて埋まってたので、記録のためにここに放流しておく。

WSLでフォルダーを作るとWindowsでNTFSなパーティションでも大文字小文字が区別される落とし穴がある - Jan 01, 1970

業務でWindowsネイティブのアプリケーションに関わることになって、Visual Studio用のプロジェクトになってるリポジトリをcloneしてきてビルドしようとしたら、fatal error C1083: コンパイラの中間生成物 ファイルを開けません。(ファイルパス):No such file or directory とエラーが出てビルドできなくて、ドハマリしてた。Windowsのエクスプローラで見ても確かにその位置にファイルはあるのに。何故?

他の人を巻き込んで調査に協力してもらって最終的に分かったことは、ファイルシステムがNTFSのパーティションでもパスの大文字小文字が区別される状態になっていることがあり、エラーメッセージに現れていたパス(すべて小文字)では実際のファイル(大文字小文字混在)にアクセスできなかったのが原因だということだった。パスの大文字小文字を区別しない状態に設定を修正したら、問題は解決した。

 

何故そんな状態が発生していたかというと、今使っている作業環境(Windows 10)に引っ越すにあたり、旧環境から必要なファイルをまとめて持ってくるために、WSL1上のrsyncを使ったのが原因だったようだ。Per-directory case sensitivity and WSL | Windows Command Lineという記事によると、This option controls which directories are treated as case sensitive, and whether new directories created with WSL will have the flag set.((DevFsのcaseオプションは)ディレクトリー名の大文字小文字の区別を制御し、WSLで新たに作られたディレクトリーは大文字小文字を区別するフラグがセットされた状態となる)とあった。PowerShellで当該フォルダに cd して fsutil.exe file queryCaseSensitiveInfo . と実行してみると、確かに問題のcloneされたリポジトリのディレクトリーはパスの大文字小文字が区別される状態になっていた。

この状態は fsutil.exe というコマンドを使って、fsutil.exe file setcasesensitiveinfo . disable とすれば解除できるそうなのだけれど、残念ながらこの fsutil.exe は再帰的な実行に対応していないため、問題を解決しようと思うと、cloneしたリポジトリ配下のファイルやディレクトリーすべてにこのコマンド列を実行しなくてはならない。それはあまりにかったるいしヒューマンエラーも起こりそうだったので、既存の質問に寄せられていた回答に倣って、PowerShellで以下のようなコマンド列を実行して再帰的にディレクトリーの設定を修正することにした。

(Get-ChildItem -Recurse -Directory).FullName | ForEach-Object {fsutil.exe file setCaseSensitiveInfo $_ disable}

普段はファイル名に大文字小文字を混在させないようになるべく意識しているせいで、この状態が発生している事に気付いてなかった。メモ帳や秀丸エディタなどのWindowsアプリケーションでエラーメッセージに現れていたパスのファイルを開こうとして、確かにファイルはあるのにファイルが見つからないと言われる、という現象が調査の過程で発生して、それでやっと気が付いたんだった。自分で知らないうちに掘っていた落とし穴に、掘ったことにも気付かず自分でハマってしまった。

という学びを得た話をWSLアドベントカレンダー2020に書けばよかったんだけど、もうすべて埋まってたので、記録のためにここに放流しておく。

Page 1/246: 1 2 3 4 5 6 7 8 9 »

Powered by blosxom 2.0 + starter kit
Home

カテゴリ一覧

過去の記事

1999.2~2005.8

最近のつぶやき