Saat ini saya menggunakan fungsi berikut untuk mendapatkan jalur folder sementara untuk pengguna saat ini:
string tempPath = System.IO.Path.GetTempPath();
Pada beberapa mesin ini memberi saya temp folder path dari pengguna saat ini seperti:
C: \ Documents and Settings \ administrator \ Local Settings \ Temp \
Pada beberapa mesin itu memberi saya path folder temp sistem seperti:
C: \ Windows \ TEMP
Dokumentasi MSDN juga mengatakan bahwa API di atas mengembalikan folder sementara sistem saat ini.
Apakah ada API lain yang tersedia yang memberi saya jalur folder sementara pengguna saat ini seperti ini:
C: \ Documents and Settings \ administrator \ Local Settings \ Temp \
c#
.net
temporary-directory
Anoop
sumber
sumber
Jawaban:
System.IO.Path.GetTempPath()
hanyalah pembungkus untuk panggilan asli keGetTempPath(..)
dalam Kernel32.Lihatlah http://msdn.microsoft.com/en-us/library/aa364992(VS.85).aspx
Disalin dari halaman itu:
Tidak sepenuhnya jelas bagi saya apakah "Direktori Windows" berarti direktori temp di bawah windows atau direktori windows itu sendiri. Membuang file temp di direktori windows itu sendiri terdengar seperti kasus yang tidak diinginkan, tetapi siapa tahu.
Jadi, menggabungkan halaman itu dengan posting Anda, saya akan menebak bahwa salah satu dari variabel TMP, TEMP atau USERPROFILE untuk pengguna Administrator Anda menunjuk ke jalur windows, atau mereka tidak ditetapkan dan mengambil fallback ke jalur temp windows.
sumber
TEMP
variabel lingkungan akan ditetapkan di dua tempat: untuk pengguna itu sendiri, dan untuk mesin lokal. Jika tidak disetel untuk pengguna, maka yang untuk mesin lokal akan digunakan, dan itu selalu ditetapkan dalam instalasi default. Karena itu pencarian biasanya berhenti pada langkah kedua. Dalam pengujian, jikaTMP
,TEMP
danUSERPROFILE
semuanya tidak disetel, sebenarnya akan kembali ke%SystemRoot%
(C:\Windows\
).JANGAN gunakan ini:
Variabel lingkungan dapat diganti, sehingga
TEMP
variabel belum tentu direktori.Cara yang benar adalah dengan menggunakan
System.IO.Path.GetTempPath()
seperti pada jawaban yang diterima.sumber
System.IO.Path.GetTempPath()
.GetEnvironmentVariable("TEMP")
danGetTempPath()
.GetTempPath()
memeriksa terlebih dahulu untuk variabel "TMP" lalu "TEMP" dan akhirnya "USERPROFILE". Jika tidak menemukan satu pun dari jalur pengembaliannya ke folder Windows. Ini juga menjamin bahwa ia mengembalikan jalur yang benar tetapi itu tidak menjamin bahwa jalan itu ada.GetTempPath
tetap bergantung pada variabel lingkungan Anda, jika Anda membaca dokumentasi kernel, sehingga saat pengguna Logman menunjukkan tidak ada alasan untuk tidak menggunakanGetEnvironmentVariable
... mereka berdua memiliki kelemahan yang sama.Saya memiliki persyaratan yang sama - kami ingin meletakkan log di direktori root tertentu yang harus ada dalam lingkungan.
Jika saya ingin menggabungkan ini dengan sub-direktori, saya harus dapat menggunakannya
Path.Combine( ... )
.The
GetFolderPath
metode memiliki kelebihan untuk pilihan folder khusus yang memungkinkan Anda untuk mengontrol apakah jalan tertentu dibuat atau hanya diverifikasi.sumber
mencoba
sumber