|
||||||||||||||||||||||||||||||||||||||||||||||||||
Где и как сохранять файлы?
Время создания: 08.04.2018 13:41
Текстовые метки: переменные среды
Раздел: Комп
Запись: xintrea/mytetra_db_adgaver_new/master/base/1523184105echhve1kme/text.html на raw.githubusercontent.com
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Где и как сохранять файлы? Автор: Аарон Маргозис. Правильные способы определения папок для хранения файлов зависят от используемой технологии программирования. Данная статья показывает, как это сделать в C++, C# и VB. NET, PowerShell, Windows Script Host (VBScript и JScript), и с помощью переменных среды. Одна из распространённых ошибок программирования, ведущая к проблемам совместимости, – неправильное задание путей к папкам. Например, программы нередко полагают, что профиль пользователя находится в папке “C:\Documents and Settings”. Пути по умолчанию могут меняться в разных версиях Windows. Сначала профили пользователей хранились в %SystemDrive%\WINNT\Profiles, затем в “%SystemDrive%\Documents and Settings”, а теперь в %SystemDrive%\Users. Профиль “All Users” теперь называется “Public”, и то, что было в папке “%USERPROFILE%\Local Settings\Application Data”, теперь находится в “%USERPROFILE%\AppData\Local”. К тому же часть того, что было в профиле “All Users”, теперь размещается в отдельной папке (по умолчанию, C:\ProgramData). Как программам сохранить правильную работу, когда пути продолжают меняться? Корректно написанным приложениям не требуется правка для определения путей к папкам во всех версиях Windows. Необходимо выполнять следующие правила:
Вот правильные способы определения путей к папкам с использованием различных технологий программирования. C++ Используйте функцию SHGetSpecialFolderPath с константами CSIDL. В программах для Windows Vista и более новых версий используйте функцию SHGetKnownFolderPath с константами KNOWNFOLDERID. Подробности по ссылкам:
Эти два примера демонстрируют получение путей к папке «Документы» текущего пользователя и к общей папке «Документы»:
C#/VB .NET (управляемый код) Используйте метод Environment.GetFolderPath, передавая перечисление Environment.SpecialFolder. Для формирования путей можно воспользоваться методом System.IO.Path.Combine. Например, следующий код C# возвращает путь к подпапке “MyData” в папке «Документы» текущего пользователя:
Этот же код на VB .NET:
Ссылки:
PowerShell Windows PowerShell базируется на .NET и может вызывать многие методы .NET из командной строки PowerShell или файла сценария. Вот как выглядит предыдущий пример на PowerShell:
C#/VB .NET с использованием неуправляемых методов (P/Invoke) В коде C# или VB .NET можно вызывать неуправляемый метод SHGetFolderPath, используя Platform Invoke (P/Invoke) . Это может быть полезным, так как неуправляемое перечисление CSIDL содержит больше папок, чем перечисление .NET SpecialFolder до версии 4.0. Windows Script Host – JScript и VBScript Windows Script Host определяет коллекцию SpecialFolders, которую можно использовать на VBScript или JScript. Следующий пример на JScript выводит путь к общему (“all users”) рабочему столу:
Этот же код на VBScript:
Ссылки:
Переменные среды и пакетные файлы Если ни один из описанных интерфейсов недоступен (например, из пакетного файла), Windows определяет относительно небольшое количество переменных среды, которые содержат некоторые пути. Использование переменных среды, по крайней мере, для части пути, лучше, чем задание путей константами. Следующая таблица содержит значения переменных среды на моей 64-разрядной Windows 7 SP1. Это всего лишь примеры значений на отдельном компьютере. Не предполагайте, что пути будут совпадать на разных компьютерах.
Ссылки:
|
||||||||||||||||||||||||||||||||||||||||||||||||||
Так же в этом разделе:
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||
|