2016-06-04 8 views
1

Wie bekomme ich den Dateinamen in Windows durch Aufruf von tmpfile() ohne tmpnam() stattdessen zu verwenden?Get filename von tmpfile() unter Windows

std::FILE* tmpf = std::tmpfile(); // Opens a temp file 

mich Do it

const char *name = tmpnam(NULL); // Get temp name 
FILE *fp = fopen(name, "w");  // Create the file 
// ... 
fclose(fp); 
remove(name); 
+0

Auf den ersten Blick, wenn Sie den Dateinamen benötigen, ist es keine temporäre Datei. – EJP

Antwort

1

Eine Möglichkeit ist, von FILE zu HANDLE

std::FILE* tmpf = std::tmpfile(); 
HANDLE handle = (HANDLE)_get_osfhandle(_fileno(tmpf)); 

Dann GetFinalPathNameByHandleW den Dateinamen zu erhalten, verwenden zu konvertieren (erfordert Vista oder höher)

char buf[MAX_PATH]; 
GetFinalPathNameByHandleA(handle, buf, MAX_PATH, VOLUME_NAME_DOS); 
+0

Ich wünschte, es gäbe einen portablen Weg, dies in Standard C++ zu tun. – Damian

1

Eine andere Möglichkeit ist, dass die Dateinamen selbst zu erzeugen - siehe Beitrag hier:

https://stackoverflow.com/a/37736406/2338477

Aber bitte beachten Sie auch, dass tmpfile sind Administratorrechte erforderlich an einigen Fenstern zu arbeiten - so mit GetFinalPathNameByHandleW nur, wenn Ihre Anwendung akzeptabel ist läuft mit Administratorrechten.