From 05f8ddb6aa148006a8523183d23b605c7c561013 Mon Sep 17 00:00:00 2001 From: FreeSlave Date: Mon, 11 Apr 2016 23:56:57 +0300 Subject: [PATCH] Add isHidden --- src/dlangui/core/files.d | 32 ++++++++++++++++++++++++++++++-- 1 file changed, 30 insertions(+), 2 deletions(-) diff --git a/src/dlangui/core/files.d b/src/dlangui/core/files.d index b0d65f6d..995877e1 100644 --- a/src/dlangui/core/files.d +++ b/src/dlangui/core/files.d @@ -499,6 +499,35 @@ bool isRoot(in string path) pure nothrow { return false; } +/** + * Check if path is hidden. + */ +bool isHidden(in string path) nothrow { + version(Windows) { + import core.sys.windows.winnt : FILE_ATTRIBUTE_HIDDEN; + import std.exception : collectException; + uint attrs; + if (collectException(path.getAttributes(), attrs) is null) { + return (attrs & FILE_ATTRIBUTE_HIDDEN) != 0; + } else { + return false; + } + } else version(Posix) { + return path.baseName.startsWith("."); + } else { + return false; + } +} + +/// +unittest +{ + version(Posix) { + assert(!"path/to/normal_file".isHidden()); + assert("path/to/.hidden_file".isHidden()); + } +} + /// returns parent directory for specified path string parentDir(in string path) pure nothrow { return buildNormalizedPath(path, ".."); @@ -545,8 +574,7 @@ bool listDirectory(in string dir, in bool includeDirs, in bool includeFiles, in DirEntry[] dirs; DirEntry[] files; foreach (DirEntry e; dirEntries(dir, SpanMode.shallow)) { - string fn = baseName(e.name); - if (!showHiddenFiles && fn.startsWith(".")) + if (!showHiddenFiles && e.name.isHidden()) continue; if (e.isDir) { dirs ~= e;