当我在Dart中实例化目录并且该文件存在时,如何检查目录是真实文件夹还是只是符号链接?
答案 0 :(得分: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
以'/'结尾,则必须将其删除。我通常最终从目录列表中获取路径,因此我在追踪目录结构时跟踪预期的路径。
您可以看到一个特殊的listDirectory()
实现,它检测符号链接并将Symlink
实例与buildtool中的分支中的File
和Directory
一起发送到流:{ {3}}
答案 1 :(得分:1)
在最前沿,现在有一个静态的FileSystemEntity.isLinkSync(路径)方法,可以告诉你某些内容是否是符号链接;当它是一个破损的符号链接时。
http://api.dartlang.org/docs/bleeding_edge/dart_io/FileSystemEntity.html
对于链接上的操作,我们添加了一个Link类。该代码现在正在审核中:
答案 2 :(得分:0)
如果要从命令行检查以验证发生了什么, ls -al DIRNAME并在权限部分检查'l',并检查它在输出右侧指向“to”的内容。
另见man 1 stat
如果您想从Dart内部检查,我不知道如何。
答案 3 :(得分:0)
FileSystemEntity.typeSync(path)
使用其中一个值
返回FileSystemEntityType
FileSystemEntityType.DIRECTORY
FileSystemEntityType.FILE
FileSystemEntityType.LINK
FileSystemEntityType.NOT_FOUND