Truncate is missing from std.stdio.File, will this do the trick?

Patrick Schluter Patrick.Schluter at bbox.fr
Tue Jul 24 09:58:44 UTC 2018


On Tuesday, 24 July 2018 at 00:15:37 UTC, spikespaz wrote:
> I needed a truncate function on the `std.stdio.File` object, so 
> I made this function. Does it look okay? Are there any 
> cross-platform improvements you can think of that should be 
> added?
>
>
> import std.stdio: File;
>
> void truncate(File file, long offset) {
>     version (Windows) {
>         import core.sys.windows.windows: SetEndOfFile;
>
>         file.seek(offset);
>         SetEndOfFile(file.windowsHandle());
>     }
>
>     version (Posix) {
>         import core.sys.posix.unistd: ftruncate;
>
>         ftruncate(file.fileno(), offset);
>     }
> }

Error handling is completely missing. It should throw a 
FileException or something when encountering an error, and there 
can be a lot of errors. Here the list of errno errors that 
ftruncate() can fail with: EFBIG, EINTR, EINVAL, EIO, EISDIR, 
EPERM, EROFS, ETXTBSY and EBADF.
for Windows it will be probably quite similar.







More information about the Digitalmars-d mailing list