Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Path.GetRandomFileName vs Path.GetTempFileName

Tags:

c#

Base on recommendation from https://msdn.microsoft.com/en-us/library/system.io.path.getrandomfilename(v=vs.110).aspx I have replaced GetTempFileName with GetRandomFileName to get a name for the temp file. And it cause a problem. Sometimes GetRandomFileName return not a file name but location in System32 folder. And of cause users with no admin rights are having an error that file is not found. Do I missed anything?

Here is a code:

string tempFileName = Path.GetRandomFileName(); FileStream tempFileStream = null; tempFileStream = File.Open(tempFileName, FileMode.Create, FileAccess.ReadWrite);

later on when I try to access that file by code:

FileInfo fileInfo = new FileInfo(tempFileName);

I have an error:

System.UnauthorizedAccessException: Access to the path 'C:\Windows\system32\25ddubwt.qsc' is denied.

I realised that when user initiate a program by using menu from Windows/Start button current directory for the application will be System32

like image 574
GenZiy Avatar asked Mar 29 '17 15:03

GenZiy


1 Answers

GetTempFileName() returns a full path, GetRandomFileName() does not.

If you assume GetRandomFileName() has a path and write to it the file may well end up in System32 if thats the current directory.

To fix create a full path:

string fname = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
like image 54
Alex K. Avatar answered Oct 09 '22 00:10

Alex K.