digitalmars.D.learn - Request you advise : isValidFilename
- Vino (53/53) Sep 22 2023 Hi All,
- FeepingCreature (3/12) Sep 22 2023 "Integer representation" here refers to the ANSI index or Unicode
- FeepingCreature (3/6) Sep 22 2023 Er oops, make that `\x00` to `\x1f`.
Hi All,
Request you help in understanding why the below code is always
returning true when it should return false as per the
documentation.
Documentation
```
Checks that the given file or directory name is valid.
The maximum length of filename is given by the constant
core.stdc.stdio.FILENAME_MAX. (On Windows, this number is defined
as the maximum number of UTF-16 code points, and the test will
therefore only yield strictly correct results when filename is a
string of wchars.)
On Windows, the following criteria must be satisfied (source):
**************
filename must not contain any characters whose integer
representation is in the range 0-31.
**************
filename must not contain any of the following reserved
characters: <>:"/\|?*
filename may not end with a space (' ') or a period ('.').
On POSIX, filename may not contain a forward slash ('/') or the
null character ('\0').
```
Code:
```
import std.stdio: writefln;
import std.path: baseName, isValidFilename;
import std.utf : byCodeUnit;
void main () {
string st1 = "C:\\Windows\\System32\\whoami1";
string st2 = "C:\\Windows\\System32\\whoami*";
string st3 = "C:\\Windows\\System32\\whoami.";
string st4 = "C:\\Windows\\System32\\whoami ";
writefln("(isValidFilename : %s)",
isValidFilename(baseName(st1).byCodeUnit));
writefln("(isValidFilename : %s)",
isValidFilename(baseName(st2).byCodeUnit));
writefln("(isValidFilename : %s)",
isValidFilename(baseName(st3).byCodeUnit));
writefln("(isValidFilename : %s)",
isValidFilename(baseName(st4).byCodeUnit));
}
```
Output:
```
(isValidFilename : true) // shouldn't it be false as it
contain's the number whoami1
(isValidFilename : false)
(isValidFilename : false)
(isValidFilename : false)
```
From,
Vino
Sep 22 2023
On Friday, 22 September 2023 at 17:44:50 UTC, Vino wrote:Hi All, Request you help in understanding why the below code is always returning true when it should return false as per the documentation. Documentation ``` filename must not contain any characters whose integer representation is in the range 0-31. ```"Integer representation" here refers to the ANSI index or Unicode codepoint, ie. the filename must not contain `\x00` to `\x31`.
Sep 22 2023
On Friday, 22 September 2023 at 17:52:51 UTC, FeepingCreature wrote:"Integer representation" here refers to the ANSI index or Unicode codepoint, ie. the filename must not contain `\x00` to `\x31`.Er oops, make that `\x00` to `\x1f`.
Sep 22 2023








FeepingCreature <feepingcreature gmail.com>