Я хочу сохранить некоторые имена файлов для пользователя (например, последние файлы).
Давайте использовать шесть примеров файлов:
c:\Documents & Settings\Ian\My Documents\Budget.xls
c:\Documents & Settings\Ian\My Documents\My Pictures\Daughter's Winning Goal.jpg
c:\Documents & Settings\Ian\Application Data\uTorrent
c:\Documents & Settings\All Users\Application Data\Consonto\SpellcheckDictionary.dat
c:\Develop\readme.txt
c:\Program Files\Adobe\Reader\WhatsNew.txt
Теперь я жестко прописал путь к специальным папкам. Если пользователь перенаправит свои папки, перейдет на другой компьютер или обновит операционную систему, пути будут повреждены:
Я хочу стать хорошим разработчиком и преобразовать эти жестко запрограммированные абсолютные пути в относительно путей из соответствующих специальных папок :
%CSIDL_Personal%\Budget.xls
%CSIDL_MyPictures%\Daughter's Winning Goal.jpg
%CSIDL_AppData%\uTorrent
%CSIDL_Common_AppData%\Consonto\SpellcheckDictionary.dat
c:\Develop\readme.txt
%CSIDL_Program_Files%\Adobe\Reader\WhatsNew.txt
Трудность заключается в том, что для одного и того же файла может быть несколько представлений, например ::101055
c:\Documents & Settings\Ian\My Documents\My Pictures\Daughter's Winning Goal.jpg
%CSIDL_Profile%\My Documents\My Pictures\Daughter's Winning Goal.jpg
%CSIDL_Personal%\My Pictures\Daughter's Winning Goal.jpg
%CSIDL_MyPictures%\Daughter's Winning Goal.jpg
Обратите внимание, что в Windows XP Мои изображения хранятся в My Documents
:
%CSIDL_Profile%\My Documents
%CSIDL_Profile%\My Documents\My Pictures
Но в Vista / 7 они разделены:
%CSIDL_Profile%\Documents
%CSIDL_Profile%\Pictures
Примечание: я понимаю синтаксис
%CSIDL_xxx%\filename.ext
недействительно; тот
Windows не будет расширять эти ключевые слова
как будто они являются строками окружения. Я только
используя это как способ спросить это
вопрос. Внутренне я бы, очевидно,
хранить элементы другим способом, например, как CSIDL
родитель
и хвост пути, например ::1089*
CSIDL_Personal \Budget.xls
CSIDL_MyPictures \Daughter's Winning Goal.jpg
CSIDL_AppData \uTorrent
CSIDL_Common_AppData \Consonto\SpellcheckDictionary.dat
-1 c:\Develop\readme.txt (-1, since 0 is a valid csidl)
CSIDL_Program_Files \Adobe\Reader\WhatsNew.txt
Возникает вопрос, как максимально использовать пути относительно канонических специальных папок?
Я думаю:
void CanonicalizeSpecialPath(String path, ref CSLID cslid, ref String relativePath)
{
return "todo";
}
Смотри также