Re: Random Access I/O

2016-03-25 Thread Adam D. Ruppe via Digitalmars-d-learn

On Saturday, 26 March 2016 at 00:10:23 UTC, Chris Williams wrote:
None of the access modes for std.stdio.File seem to allow that. 
Any usage of the "w" mode causes my code to consider the file 
empty if it pre-exists (though, it doesn't always actually 
truncate the disk on file?)


Mode "a+" or "r+" for append+read or read+write will do it, same 
as in C.


If I was coding in C, I would use open() as it gives more 
options for access:


This function is in `import core.sys.posix.fcntl;` (the 
documentation is lax on this but generally when you see a Posix 
function in C that is #include, you can get it in D with 
`import core.sys.posix.X`.


Re: Random Access I/O

2016-03-25 Thread data pulverizer via Digitalmars-d-learn

On Saturday, 26 March 2016 at 00:10:23 UTC, Chris Williams wrote:
I need to be able to perform random access I/O against a file, 
creating a new file if it doesn't exist, or opening as-is (no 
truncation) if it already exists.


None of the access modes for std.stdio.File seem to allow that. 
Any usage of the "w" mode causes my code to consider the file 
empty if it pre-exists (though, it doesn't always actually 
truncate the disk on file?)


If I was coding in C, I would use open() as it gives more 
options for access:


http://pubs.opengroup.org/onlinepubs/009695399/functions/open.html

However, I don't see this exposed in phobos anywhere?


The Programming in D book chapter on Files 
http://ddili.org/ders/d.en/files.html will help. I think the 
"std.stdio.File struct" section on the same page has what you 
need. Also, take a look at 
http://dlang.org/phobos/std_stdio.html#.File.open.