0

Dart でディレクトリをインスタンス化し、そのファイルが存在する場合、そのディレクトリが実際のフォルダーなのか、それとも単なるシンボリック リンクなのかを確認するにはどうすればよいですか?

4

4 に答える 4

1

シンボリック リンクを認識できる方法は、パスがフル パスと異なる場合です。fullPath()ディレクトリにはまたはfullPathSync()がありませんが、File.fullPathSync()ディレクトリに対して機能します。だからあなたはこれを行うことができます:

bool maybeIsSymlink(String path) {
  var fullPath = new File(path).fullPathSync();
  return path != fullPath;
}

pathただし、これは が絶対であり、その祖先がシンボリック リンクでない場合にのみ正しく機能します。ディレクトリの親のフルパスを取得できることを回避するには、ディレクトリ名を追加して比較します。

bool isSymlink(String pathString) {
  var path = new Path(path);

  var parentPath = path.directoryPath;
  var fullParentPath = new File.fromPath(parentPath).fullPathSync();
  var expectedPath = new Path(fullParentPath).append(path.filename).toString();

  var fullPath = new File.fromPath(path).fullPathSync();

  return fullPath != expectedPath;
}

私はこれをテストしていませんが、Dart で多くのシンボリックリンクを扱っていることに注意してください。これはうまくいくはずです。「/」で終わる場合pathStringは、それを削除する必要があります。私は通常、ディレクトリ リストからパスを取得することになるので、ディレクトリ構造を再帰的にたどりながら、予想されるパスを追跡します。

buildtool のブランチで、シンボリック リンクを検出し、 s およびsとともにインスタンスをストリームにlistDirectory()送信する特別な実装を確認できます: https://github.com/dart-lang/buildtool/blob/m4/lib/src/util/ io.dartSymlinkFileDirectory

于 2013-03-13T06:00:03.183 に答える
0
FileSystemEntity.typeSync(path)

FileSystemEntityType値の 1 つを含む を返します

  • FileSystemEntityType.DIRECTORY
  • FileSystemEntityType.FILE
  • FileSystemEntityType.LINK
  • FileSystemEntityType.NOT_FOUND
于 2016-08-22T08:39:33.787 に答える
0

コマンドラインから何が起こっているかを確認したい場合は、ls -al DIRNAME を実行して権限セクションで「l」を確認し、出力の右側で「l」が何を指しているかを調べます。

man 1 stat も参照

Dart 自体から確認したい場合は、方法がわかりません。

于 2013-03-12T23:21:43.333 に答える