की समस्या अपने पहला जवाब यह है कि यदि आपको डिफ़ॉल्ट डाउनलोड डिर को [डाउनलोड 1] में बदल दिया गया है तो यह आपको गलत परिणाम देगा! उचित तरीके से यह सभी संभावनाओं को कवर है
using System;
using System.Runtime.InteropServices;
static class cGetEnvVars_WinExp {
[DllImport("Shell32.dll")] private static extern int SHGetKnownFolderPath(
[MarshalAs(UnmanagedType.LPStruct)]Guid rfid, uint dwFlags, IntPtr hToken,
out IntPtr ppszPath);
[Flags] public enum KnownFolderFlags : uint { SimpleIDList = 0x00000100
, NotParentRelative = 0x00000200, DefaultPath = 0x00000400, Init = 0x00000800
, NoAlias = 0x00001000, DontUnexpand = 0x00002000, DontVerify = 0x00004000
, Create = 0x00008000,NoAppcontainerRedirection = 0x00010000, AliasOnly = 0x80000000
}
public static string GetPath(string RegStrName, KnownFolderFlags flags, bool defaultUser) {
IntPtr outPath;
int result =
SHGetKnownFolderPath (
new Guid(RegStrName), (uint)flags, new IntPtr(defaultUser ? -1 : 0), out outPath
);
if (result >= 0) {
return Marshal.PtrToStringUni(outPath);
} else {
throw new ExternalException("Unable to retrieve the known folder path. It may not "
+ "be available on this system.", result);
}
}
}
यह परीक्षण करने के लिए, यदि आप विशेष रूप से अपने व्यक्तिगत डाउनलोड dir की इच्छा आप गलत पर झंडा डिफ़ॉल्ट करने के लिए, ->
using System.IO;
class Program {
[STAThread]
static void Main(string[] args) {
string path2Downloads = string.Empty;
path2Downloads =
cGetEnvVars_WinExp.GetPath("{374DE290-123F-4565-9164-39C4925E467B}", cGetEnvVars_WinExp.KnownFolderFlags.DontVerify, false);
string[] files = { "" };
if (Directory.Exists(path2Downloads)) {
files = Directory.GetFiles(path2Downloads);
}
}//Main
}
या सिर्फ एक लाइन [ पर्यावरण का उपयोग करना। एक्सपैंड पर्यावरण पर्यावरण()]>> (सबसे सरल समाधान)
using System.IO;
class Program {
[STAThread]
static void Main(string[] args) {
string path2Downloads = string.Empty;
string[] files = { "" };
path2Downloads = Environment.ExpandEnvironmentVariables(@"%USERPROFILE%\Downloads");
if (Directory.Exists(path2Downloads)) {
files = Directory.GetFiles(path2Downloads);
}
}//Main
}
स्रोत
2017-10-26 18:35:01
Vista से पहले स्थानीयकृत विंडोज़ पर यह काम करने का कोई तरीका है? अर्थात। 'पथ। कॉम्बाइन (पथ, "डाउनलोड");' काम नहीं करेगा, क्योंकि फ़ोल्डर को 'टेलेचार्जमेंट' कहा जाता है, न कि 'डाउनलोड'। –
आप शायद इसे कहीं रजिस्ट्री से खोद सकते हैं। मुझे नहीं पता कि, मैं बहुत समय पहले एक्सपी सेवानिवृत्त हुआ था। Regedit.exe इसे वापस ढूंढने के लिए उपयोगी है। –
'SHGetKnownFolderPath' का उपयोग क्यों करें और 'पर्यावरण। SpecialFolder' नहीं? – Kiquenet