Getting a safe path for a temporary file

via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jan 18 03:22:43 PST 2015


On Saturday, 17 January 2015 at 17:16:41 UTC, Tobias Pankrath
wrote:
> On Saturday, 17 January 2015 at 16:55:42 UTC, Marc Schütz wrote:
>> On Saturday, 17 January 2015 at 14:37:00 UTC, Laeeth Isharc 
>> wrote:
>>> On Saturday, 17 January 2015 at 13:47:39 UTC, Marc Schütz 
>>> wrote:
>>>> Is it currently possible to get the path to a safe temporary 
>>>> file, i.e. one that is guaranteed to be freshly created and 
>>>> will not override another existing file?
>>>>
>>>> There's `std.file.tempDir`, which doesn't create a unique 
>>>> file. Then there's `std.stdio.tmpfile()`, which does, but it 
>>>> returns a `File` object, and its `name` property is `null`.
>>>>
>>>> Did I miss something? IMO this is very import functionality. 
>>>> One use case is passing these names as command line 
>>>> arguments to an external program that doesn't support 
>>>> stdin/stdout.
>>>
>>> I agree that it would be useful.
>>>
>>> This is what I used, although there may be a better option:
>>>
>>> http://dlang.org/phobos/std_uuid.html
>>
>> Nice idea, but it still allows for intentional collision 
>> attacks :-(
>>
>> The only really safe solution is one that generates (probably) 
>> unique names, then opens the file with O_EXCL|O_CREAT (or 
>> whatever other means the OS provides), and if it fails, 
>> retries with a different name. `std.stdio.tmpfile()` already 
>> does that (it uses `tmpfile(3)` under the hood), but doesn't 
>> allow access to the name.
>
> You're looking for core.sys.posix.stdlib : mkstemp.
>
> I think that should be used by std.stdio.File as well, care to 
> create an enhancement request in bugzilla?

But it's POSIX only :-(


More information about the Digitalmars-d-learn mailing list