ENOENT エラーの原因は何ですか?

ENOENT エラーの原因は何ですか?

Node スクリプトを実行していますが、次のパスでこのエラーが発生します:

 ENOENT ../../../Library/Application Support/Google/Chrome/RunningChromeVersion

Chromeを閉じるとエラーを解消できます。

グーグルで調べた結果、エノエントエラーは存在しないファイル/フォルダーによって発生します。

ただし、この場合、フォルダーは明らかに存在し、Chrome が実行されているという事実に関係しています。

ファイルが使用中であっても、ファイルを走査できるようにしたいのですが、これは可能ですか?

その他のエラーのほとんどは Apple によって発生しており、私は Apple マシンを使用しています。

ENOENT ../../../Library/Containers/com.apple..NowPlayingWidgetContainer/Data/Documents/iChats

答え1

指定されたアイテムRunningChromeVersionは存在しますが、シンボリックリンクだれの目標存在しません。Node スクリプトはリンクに対して特別な処理を行わないため、リンクを開こうとすると、デフォルトのアクションはリンクをたどることになります。

リンクのターゲットは、そもそもファイルを指すことを意図していないため、存在しません。これは、ファイル名が通常入る「ターゲット」フィールドに、無関係な情報 (バージョン番号など) が格納されたダミー リンクです。

たとえば、Linux での同等のものは次のとおりです ( l「type」の表示に注意してください)。

$ ls -l ~/.config/chromium
合計 420万
...
drwx------ 3 grawity ユーザー 4.0K 5月14日 09:52 ShaderCache/
lrwxrwxrwx 1 grawity ユーザー 20 5月 17 13:38 SingletonCookie-> 18396286875963223082
lrwxrwxrwx 1 grawity ユーザー 12 5月 17 13:38 SingletonLock-> 霜-453916
lrwxrwxrwx 1 grawity ユーザー 50 5月17日 13:38 SingletonSocket-> /tmp/.org.chromium.Chromium.7Og2ow/シングルトンソケット=
drwx------ 3 grawity ユーザー 4.0K 12月27日 08:02 SSLErrorAssistant/
...

これは「ロック ファイル」を作成する一般的な方法です。リンクをアトミックに作成するには 1 つのシステム コール (リンクが既に存在する場合は失敗) のみが必要で、その「コンテンツ」(「ターゲット」フィールド) を読み取るには 1 つのシステム コールのみが必要です。また、実際のファイル ロックはこれらのネットワーク ファイル システムではうまく機能しない傾向があるのに対し、NFS/SMB/AFS と互換性があると思います。

readdir() を使ってディレクトリをスキャンする場合、各ディレクトリエントリにはすでにそのタイプに関する情報があります。例えばNodeでは、次のように呼び出すことができます。.isSymbolicLink()各 readdir 結果に対して。

パスのみの場合は、Nodeに相当するlstat()パスがシンボリックリンクであるかどうかを確認し、そのようにパスをトラバースしないようにする関数 (readlink()必要に応じて、その「ターゲット」フィールドを読み取ることもできます)。

それは実際には推奨再帰的なファイル検索を行うときにシンボリック リンクをスキップします。シンボリック リンクをたどると無限ループに陥る可能性があるためです (例: dirA/linkB は ../dirB を指していますが、dirB/linkA は ../dirA を指しているため、行き詰まってしまいます)。

関連情報