大家今天想跟大家唠唠我捣鼓这玩意儿的经历。也不是什么高深的东西,就是前段时间做个小工具,遇到点实际问题,才去琢磨它的。
起因是这样的,我那个小程序需要知道自己跑在哪个系统上,比如是Windows还是别的版本号多少。还有,我想让程序能读取一些我提前在系统里设置好的配置信息,就是那种环境变量,省得硬编码写死在代码里,改起来麻烦。
开始摸索
我也不太清楚具体咋弄。就想着肯定有现成的方法能拿到这些系统信息。我就去翻翻资料,试着搜搜“获取操作系统信息”、“读取环境变量”之类的关键词。很快就注意到这个叫Environment
的类(或者类似名字的东西,不同语言可能叫法有点差异,但功能大同小异)。
看着名字就觉得靠谱,"Environment",环境嘛应该就是管这些的。
动手试试
我先试着获取最简单的东西,比如当前程序运行的目录。这玩意儿挺常用的,比如你要读写程序旁边的文件就得知道路径。我找到一个像是CurrentDirectory
之类的属性或者方法,试一下,真能拿到当前工作目录的完整路径,挺方便。
我又尝试获取操作系统信息。也有对应的属性,像是能拿到操作系统的平台标识(比如是Windows NT还是Unix)、版本号之类的。这些信息对我那个小工具判断运行环境很有用。
读取环境变量
然后就是重头戏——读取环境变量。我需要在系统里设置一个变量,比如叫MY_APP_CONFIG_PATH
,然后让我的程序去读这个变量,找到配置文件的位置。
我发现Environment
类里头有个类似GetEnvironmentVariable
的方法。用法也简单,就是把你想读取的环境变量的名字传进去就行。
比如,我想读PATH
变量,就调用GetEnvironmentVariable("PATH")
。试下,果然能拿到那一长串的路径。
然后我就试着读取我自己定义的MY_APP_CONFIG_PATH
。一开始没成功,后来才反应过来,环境变量还分用户变量和系统变量。
- 用户变量:只对当前登录的用户有效。
- 系统变量:对这台电脑上的所有用户都有效。
我当时是在系统变量里设置的,但可能读取的时候默认是先找用户变量?或者是我代码写错?反正折腾一下,确保用对方法,最终是成功读到我设置的路径。这点得注意,有时候你设置变量但程序读不到,可能就是作用域搞混。
其他发现
在捣鼓的过程中,我还发现能干不少其他事儿:
- 获取机器名:用类似
MachineName
的属性能拿到计算机名。 - 获取用户名:用类似
UserName
的属性能拿到当前登录的用户名。 - 获取命令行参数:有时候运行程序会带一些参数,用类似
CommandLine
或者GetCommandLineArgs
的方法也能拿到。 - 获取特殊文件夹路径:比如“我的文档”、“桌面”、“应用程序数据”这些文件夹,它们在不同系统、不同用户下的路径可能不一样。
Environment
提供一些方法(比如GetFolderPath
配合一些枚举值)可以直接获取这些特殊文件夹的准确路径,避免路径拼接的麻烦和错误。
最终实践
在我那个小工具里,我就用GetEnvironmentVariable
来读取我设置的MY_APP_CONFIG_PATH
。这样一来,配置文件放在哪里就很灵活,只需要在使用前设置好环境变量就行,程序代码不用改动。我还用获取操作系统版本的功能,针对不同系统做一些兼容处理。
这东西虽然看起来简单,但在需要和操作系统环境打交道的时候,确实是个挺实用、挺方便的工具集。它能帮你拿到很多有用的系统信息和配置,让你的程序更灵活、更健壮。这回折腾下来,感觉收获还是挺大的,以后再遇到类似需求就知道怎么快速搞定。