phobos std.Stream.File incorrect open/wrong implementation

Spacen Jasset spacenjasset at yahoo.co.uk
Fri Oct 24 07:34:15 PDT 2008


Spacen Jasset wrote:
> I am trying to create a new file for writing, as a log file, like this:
> 
> new File("gltest.log", FileMode.OutNew);
> 
> and find that with any of the "write" options the file appears to be 
> opened for exclusive access on windows, so another process cannot then 
> read from the same file. Is there a way around this? Other than 
> continually opening and closing the log file, which also won't work 
> because then the log file can't be written to if it's being read from.
> 
> 14:25:35    gltest.exe:5852    OPEN    J:\bzr\gltest\trunk\gltest.log    
> SUCCESS Options: OpenIf  Access: 00120196   
> 
> 
> I have also seen that readline like activity:
> 
>     foreach (char[] line; input) {
> 
> will make system calls for one byte at a time? Is there no buffering in 
> the phobos lib?
> 
> 14:25:35    gltest.exe:5852    OPEN    J:\bzr\gltest\trunk\gltest.cfg    
> SUCCESS Options: Open  Access: Read   
> 14:25:35    gltest.exe:5852    QUERY INFORMATION 
> J:\bzr\gltest\trunk\gltest.cfg    SUCCESS    Length: 381   
> 14:25:35    gltest.exe:5852    READ     
> J:\bzr\gltest\trunk\gltest.cfg    SUCCESS Offset: 0 Length: 1   
> 14:25:35    gltest.exe:5852    READ    J:\bzr\gltest\trunk\gltest.cfg    
> SUCCESS Offset: 1 Length: 1   
> 14:25:35    gltest.exe:5852    READ    J:\bzr\gltest\trunk\gltest.cfg    
> SUCCESS Offset: 2 Length: 1   
> 14:25:35    gltest.exe:5852    READ    J:\bzr\gltest\trunk\gltest.cfg    
> SUCCESS Offset: 3 Length: 1   
I've raised a bug for the wrong share mode.

The workaround is to say: FileMode.OutNew |  FileMode.In even if you 
don't want to read from the file.


More information about the Digitalmars-d-learn mailing list