设为首页 收藏本站
查看: 683|回复: 0

[经验分享] Visual Studio 2008 、 Windows 环境变量介绍和c++文件流中文件路径

[复制链接]

尚未签到

发表于 2015-11-3 13:48:51 | 显示全部楼层 |阅读模式

Visual Studio 2008  和 Windows 环境变量对设置 相对路径很重要,这样便于代码的移植,即使换一台计算机,代码不用更改配置,直接就能用。


可以在项目的“工具”“属性页”对话框中任何接受字符串的位置使用这些宏。这些宏不区分大小写。











说明




$(RemoteMachine)



在“调试”属性页上设置为 Remote Machine 属性的值。有关更多信息,请参见更改用于
C/C++ 调试配置的项目设置。




$(Configuration)



当前项目配置的名称(例如“Debug”)。




$(Platform)



当前项目平台的名称(例如“Win32”)。




$(RootNameSpace)



包含应用程序的命名空间(如果有)。




$(IntDir)



为中间文件指定的相对于项目目录的目录路径。此路径应具有尾部斜杠。这解析为Intermediate Directory 属性的值。




$(OutDir)



输出文件目录的路径,相对于项目目录。此路径应具有尾部斜杠。这解析为 Output Directory 属性的值。




$(DevEnvDir)



Visual Studio 2010 的安装目录(定义为驱动器 + 路径);包括尾部反斜杠“/”。




$(ProjectDir)



项目的目录(定义形式:驱动器 + 路径);包括尾部的反斜杠“/”。




$(ProjectPath)



项目的绝对路径名(定义形式:驱动器 + 路径 + 基本名称 + 文件扩展名)。




$(ProjectName)



项目的基名称。




$(ProjectFileName)



项目的文件名(定义为基本名称 + 文件扩展名)。




$(ProjectExt)



项目的文件扩展名。它包括“.”在文件扩展名之前。




$(SolutionDir)



解决方案的目录(定义形式:驱动器 + 路径);包括尾部的反斜杠“/”。




$(SolutionPath)



解决方案的绝对路径名(定义形式:驱动器 + 路径 + 基本名称 + 文件扩展名)。




$(SolutionName)



解决方案的基名称。




$(SolutionFileName)



解决方案的文件名(定义为基本名称 + 文件扩展名)。




$(SolutionExt)



解决方案的文件扩展名。它包括“.”在文件扩展名之前。




$(TargetDir)



生成的主输出文件的目录(定义形式:驱动器 + 路径);包括尾部的反斜杠“/”。




$(TargetPath)



生成的主输出文件的绝对路径名(定义形式:驱动器 + 路径 + 基本名称 + 文件扩展名)。




$(TargetName)



生成的主输出文件的基本名称。




$(TargetFileName)



生成的主输出文件的文件名(定义为基本名称 + 文件扩展名)。




$(TargetExt)



生成的主输出文件的文件扩展名。它包括“.”在文件扩展名之前。




$(VSInstallDir)



安装 Visual Studio 2010 的目录。

此属性包含目标 Visual Studio 的版本,该版本可能与宿主 Visual Studio 不同。例如,在使用 $(PlatformToolset) = v90 进行生成时,$(VSInstallDir) 包含 Visual Studio 2008 安装位置的路径。




$(VCInstallDir)



安装 Visual C++ 2010 的目录。

此属性包含目标 Visual C++ 的版本,该版本可能与宿主 Visual Studio 不同。例如,在使用 $(PlatformToolset) = v90 进行生成时,$(VCInstallDir) 包含 Visual C++ 2008 安装位置的路径。




$(FrameworkDir)



安装 .NET Framework 的目录。




$(FrameworkVersion)



Visual Studio 使用的 .NET Framework 版本。与 $(FrameworkDir) 相结合,就是 Visual Studio 使用的 .NET Framework 版本的完整路径。




$(FrameworkSDKDir)



安装 .NET Framework 的目录。.NET Framework 可能已作为 Visual Studio 2010 的一部分安装,也可能单独安装。




$(WebDeployPath)



从 Web 部署根到项目输出所属于的位置的相对路径。返回与 RelativePath 相同的值。




$(WebDeployRoot)



指向 <localhost> 位置的绝对路径。例如,c:/inetpub/wwwroot。




$(FxCopDir)



fxcop.cmd 文件的路径。fxcop.cmd 文件不和所有的 Visual C&#43;&#43; 版本一起安装。










出处:http://msdn.microsoft.com/zh-cn/library/c02as0cs.aspx


Visual Studio 2010

  >>Visual Studio

    >>Visual Studio 语言

      >>Visual C&#43;&#43;

        >>Building a C/C&#43;&#43; Program

          >>在 Visual Studio 中生成 C&#43;&#43; 项目

            >>用于生成命令和属性的宏



Visual Studio 2008 产生的临时文件



http://www.cnblogs.com/owen-zhang/archive/2010/01/07/VisualStudioTemporaryFilesFolder.html


Visual Studio临时文件存放的文件夹




在使用Visual Studio开发工具的过程中,Visual Studio会在如下文件夹(以VS2008和.NET Framework 2.0为例)中生成一些临时性的文件:

1、ReflectedSchemas:完整路径为“C:\Documents and Settings\Administrator\Application Data\Microsoft\VisualStudio\9.0\ReflectedSchemas”。

2、ReflectedTypeLibs:完整路径为“C:\Documents and Settings\Administrator\Application Data\Microsoft\VisualStudio\9.0\ReflectedTypeLibs”。

3、Temporary ASP.NET Files:完整路径为“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files“。




我的系统不是C盘,用户名也不是Administrator,有批处理命令中用环境变量:

1、%USERPROFILE%\Application Data\Microsoft\VisualStudio\9.0\ReflectedSchemas

2、%USERPROFILE%\Application Data\Microsoft\VisualStudio\9.0\ReflectedTypeLibs

3、%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files





Windows 环境变量介绍





http://hi.baidu.com/renol/blog/item/2b788458cc87cb8d810a185b.html


Windows系统路径环境变量

%SystemDrive%        操作系统所在的分区号。如   C:


%SystemRoot%         操作系统根目录。如 C:\WINDOWS


%windir%                   操作系统根目录。如 C:\WINDOWS


%ALLUSERSPROFILE%           相当于   C:\Documents and Settings\All Users


%APPDATA%           相当于   C:\Documents and Settings\用户目录\Application Data


%ProgramFiles%      相当于   C:\Program Files


%CommonProgramFiles%          相当于   C:\Program Files\Common Files


%HOMEDRIVE%       操作系统所在的分区号。如:C:


%HOMEPATH%        相当于   \Documents and Settings\用户目录


%USERPROFILE%   相当于   C:\Documents and Settings\用户目录


%HOMEDRIVE%     = C:\                    当前启动的系统的所在分区

%SystemRoot%      = C:\WINDOWS           当前启动的系统的所在目录

%windir%                 = %SystemRoot% = C:\WINDOWS                   当前启动的系统的所在目录

%USERPROFILE% = C:\Documents and Settings\sihochina           当前用户数据变量

%HOMEPATH%       = C:\Documents and Settings\sihochina           当前用户环境变量

%system%              = C:\WINDOWS\SYSTEM32   


%ALLUSERSPROFILE% : 列出所有用户Profile文件位置。

%APPDATA% :   列出应用程序数据的默认存放位置。

%CD% :   列出当前目录。

%CLIENTNAME% :   列出联接到终端服务会话时客户端的NETBIOS名。

%CMDCMDLINE% :   列出启动当前cmd.exe所使用的命令行。

%CMDEXTVERSION% :   命令出当前命令处理程序扩展版本号。

%CommonProgramFiles% :   列出了常用文件的文件夹路径。

%COMPUTERNAME% :   列出了计算机名。

%COMSPEC% :   列出了可执行命令外壳(命令处理程序)的路径。

%DATE% :   列出当前日期。

%ERRORLEVEL% :   列出了最近使用的命令的错误代码。

%HOMEDRIVE% :   列出与用户主目录所在的驱动器盘符。

%HOMEPATH% :   列出用户主目录的完整路径。

%HOMESHARE% :   列出用户共享主目录的网络路径。

%LOGONSEVER% :   列出有效的当前登录会话的域名控制器名。

%NUMBER_OF_PROCESSORS% :   列出了计算机安装的处理器数。

%OS% :   列出操作系统的名字。(Windows XP 和 Windows 2000 列为 Windows_NT.)

%Path% :   列出了可执行文件的搜索路径。

%PATHEXT% :   列出操作系统认为可被执行的文件扩展名。

%PROCESSOR_ARCHITECTURE% :   列出了处理器的芯片架构。

%PROCESSOR_IDENTFIER% :   列出了处理器的描述。

%PROCESSOR_LEVEL% :   列出了计算机的处理器的型号。

%PROCESSOR_REVISION% :   列出了处理器的修订号。

%ProgramFiles% :   列出了Program Files文件夹的路径。

%PROMPT% :   列出了当前命令解释器的命令提示设置。

%RANDOM% :   列出界于0 和 32767之间的随机十进制数。

%SESSIONNAME% :   列出连接到终端服务会话时的连接和会话名。

%SYSTEMDRIVE% :   列出了Windows启动目录所在驱动器。

%SYSTEMROOT% :   列出了Windows启动目录的位置。

%TEMP% and %TMP% :   列出了当前登录的用户可用应用程序的默认临时目录。

%TIME% :   列出当前时间。

%USERDOMAIN% :   列出了包含用户帐号的域的名字。

%USERNAME% :   列出当前登录的用户的名字。

%USERPROFILE% :   列出当前用户Profile文件位置。

%WINDIR% :   列出操作系统目录的位置。


变量 类型 描述

%ALLUSERSPROFILE% 本地 返回“所有用户”配置文件的位置。

%APPDATA% 本地 返回默认情况下应用程序存储数据的位置。

%CD% 本地 返回当前目录字符串。

%CMDCMDLINE% 本地 返回用来启动当前的 Cmd.exe 的准确命令行。

%CMDEXTVERSION% 系统 返回当前的“命令处理程序扩展”的版本号。

%COMPUTERNAME%   系统 返回计算机的名称。

%COMSPEC%   系统 返回命令行解释器可执行程序的准确路径。

%DATE%   系统 返回当前日期。使用与 date /t 命令相同的&#26684;式。由 Cmd.exe 生成。有关 date 命令的详细信息,请参阅 Date。

%ERRORLEVEL%   系统 返回上一条命令的错误代码。通常用非零&#20540;表示错误。

%HOMEDRIVE%   系统 返回连接到用户主目录的本地工作站驱动器号。基于主目录&#20540;而设置。用户主目录是在“本地用户和组”中指定的。

%HOMEPATH%   系统 返回用户主目录的完整路径。基于主目录&#20540;而设置。用户主目录是在“本地用户和组”中指定的。

%HOMESHARE%   系统 返回用户的共享主目录的网络路径。基于主目录&#20540;而设置。用户主目录是在“本地用户和组”中指定的。

%LOGONSERVER%   本地 返回验证当前登录会话的域控制器的名称。

%NUMBER_OF_PROCESSORS%   系统 指定安装在计算机上的处理器的数目。

%OS%   系统 返回操作系统名称。Windows 2000 显示其操作系统为 Windows_NT。

%PATH% 系统 指定可执行文件的搜索路径。

%PATHEXT% 系统 返回操作系统认为可执行的文件扩展名的列表。

%PROCESSOR_ARCHITECTURE%   系统 返回处理器的芯片体系结构。&#20540;:x86 或 IA64(基于 Itanium)。

%PROCESSOR_IDENTFIER% 系统 返回处理器说明。

%PROCESSOR_LEVEL%   系统 返回计算机上安装的处理器的型号。

%PROCESSOR_REVISION% 系统 返回处理器的版本号。

%PROMPT% 本地 返回当前解释程序的命令提示符设置。由 Cmd.exe 生成。

%RANDOM% 系统 返回 0 到 32767 之间的任意十进制数字。由 Cmd.exe 生成。

%SYSTEMDRIVE% 系统 返回包含 Windows server operating system 根目录(即系统根目录)的驱动器。

%SYSTEMROOT%   系统 返回 Windows server operating system 根目录的位置。

%TEMP% 和 %TMP% 系统和用户 返回对当前登录用户可用的应用程序所使用的默认临时目录。有些应用程序需要 TEMP,而其他应用程序则需要 TMP。

%TIME% 系统 返回当前时间。使用与 time /t 命令相同的&#26684;式。由 Cmd.exe 生成。有关 time 命令的详细信息,请参阅 Time。

%USERDOMAIN% 本地 返回包含用户帐户的域的名称。

%USERNAME% 本地 返回当前登录的用户的名称。

%USERPROFILE% 本地 返回当前用户的配置文件的位置。

%WINDIR% 系统 返回操作系统目录的位置。


%temp%        = %USERPROFILE%\Local Settings\Temp = C:\Documents and Settings\sihochina\Local Settings\Temp                                                                              当前用户TEMP缓存变量

------------------------------------------------------------------------

例如:%windir%\drives 的实际路径就是 C:\WINDOWS\drives 目录。

          所谓变量,就是指一个在不同环境中会有相对不同的&#20540;的、但在所有环境中都有相同约定的含义的量。

          这些变量,可以在开始菜单-运行中输入,如输入%SystemRoot% ,系统会直接打开 C:\WINDOWS 目录。

如果你当前的系统是装在D盘的2000的话,上边这个变量的执行结果就是打开 D:\WINNT 目录了。





Visual Studio 2008 环境变量的配置



在调试 Visual Studio 2008 程序时,经常有一些动态链接库(即 dll 文件)需要加载到工程里,这样才能依赖第三方库进行程序调试。


这些动态链接库,往往都是测试版本或是开发中的版本,或者会有若干个版本;这个时候,如果直接把 dll 所在目录加到 PATH 里,则会有潜在冲突的危险;如果直接拷贝到 Visual Studio 的目录下,假如测试工程太多,每次有新版本的动态链接库更新时,你需要更新若干次,拷贝、粘贴苦不堪言。


在开发过程中,究竟怎样来让 Visual Studio 链接这些 lib 及 dll 文件会比较好呢?


总体上来说,有几种方法可以改变 Visual Studio 的环境变量设置:



  • 直接添加到系统的 PATH 变量里:

    这个方法最简单,也最直接,但是坏处是会影响全局的 PATH 设置,尤其是你包含着大量测试用的 dll 时。

  • 在 Visual Studio 全局设置里,把 dll 所在目录添加到 PATH 里:

    通过 Visual Studio 菜单 ==> 工具 ==> 选项 ==> 项目和解决方案 ==> VC&#43;&#43;目录,在下拉框里选择&quot;可执行文件&quot;,然后把 dll 所在路径添加进去。

  • 直接把所有 dll 拷贝到 Visual Studio 工程目录下,或是拷贝到生成可执行文件的文件夹(默认情况下是 Debug 或 Release 目录)下:

    这个方法也很简单,但是当你有若干个工程时,你每次更新 SDK 及其 dll 文件,你就要把所有的工程都更新,这个不符合文件唯一性的工程性准则。

  • 在调试程序时,让 Visual Studio 帮你切换当前工作目录到 dll 相应的目录下:

    在 Visual Studio ==> Project ==> Properties ==> Select Configuration ==> Configuration Properties ==> Debugging ==> Working directory 里填上 dll 所在目录,这样当在调试程序时,Visual Studio 会把当前工作目录切换到这个目录下,从而会自动读取本目录下的 dll 文件。


    这个方法的优点很明显,简单!副作用也很明显,在你切换了当前工作目录后,你可能会找不到程序的配置文件,在程序里写的诸如&quot;./config.ini&quot;全部都找不到了;另外,你要把所有的 dll 都放到这个工作目录里,否则一样会提示说找不到 xxx.dll 的问题。

  • 最后一个方法,也是我认为最好的一个方法,在 Visual Studio 工程属性里把一个目录临时添加到 PATH 环境变量里:

    MSDN 上也有类&#20284;的介绍:How to: Set Environment Variables for Projects,方法很简单,在 &quot;工程属性&quot;
    ==> &quot;调试&quot; ==> &quot;环境&quot;里,添加类&#20284;如下所示的内容:


    PATH=%PATH%;$(TargetDir)\DLLS

    这样就可以把 $(TargetDir)\DLLS 临时添加到该工程所属的系统 PATH 里。



大家可以根据项目的实际情况,灵活选用以上方法。


注:本文撰写时参考了 StackOverflow 上的讨论话题:How do I set a path
in visual studio?



1.1    小议c&#43;&#43;文件流中文件路径



    在论坛中闲逛时,经常发现有朋友调试c/c&#43;&#43;文件流的代码时,遇到文件路径的问题。下来我结合自己的经验,一起探讨一下。



1.1.1   文件路径的基本概念



OS的文件系统是一个树状结构,有目录、文件的概念。


windows系统的例子:


E:\myprograme\BBG\include\bbg_stl>tree




E:.


│  bbg_stl_config.h


├─bbg_list


│      bbg_list.h


├─bbg_alloc


│      bbg_allocpool.h


│      bbg_alloc_adapter.h


│      bbg_construct.h


│      bbg_simple_alloc.h


│      bbg_allocator.h


│      bbg_uninitialized.h


├─bbg_common


│      bbg_export.h


│      bbg_common.h


├─bbg_iterator


│      bbg_iterator.h


├─bbg_vector


│      bbg_vector.h


├─bbg_type


│      bbg_type_traits.h


└─bbg_algorithm


        bbg_algorithm.h


linux 系统的例子


yes@yes-desktop:~/myprograme$ find /home/yes/myprograme -type f


/home/yes/myprograme/main


/home/yes/myprograme/test.c


/home/yes/myprograme/tt-v4.7.zip


/home/yes/myprograme/main.cpp


/home/yes/myprograme/test


yes@yes-desktop:~/myprograme$



1.1.1.1         相对路径



“.” 一个“点”代表是当前目录所在的路径。对应着windows示例中的路径是:“E:\myprograme\BBG\include\bbg_stl


“..” 两个“点”代表,相对于当前目录的上一层目录路径。对应着windowss示例中的路径是:“E:\myprograme\BBG\include


UNIX家族、LINUX系统上,“.”和“..”的含义和windows是一样的。这两个路径称为相对路径。


当然类&#20284; “..\ \BBG\include” 也是相对路径



1.1.1.2           目录分隔符的问题



从上面的两个示例中,可以发现windows系统的目录分隔符是“\”,而linux系统的目录分隔符是“/”



1.1.1.3            绝对路径



在windows系统中,以盘符开头的路径叫做绝对路径,比如:


E:\myprograme\BBG\include


而在linux系统中,“/”开头的路径叫做绝对路径,比如:


“/home/yes/myprograme/test


注意:“/”是UNIX家族、LINUX所有目录的根目录。



1.1.2   C&#43;&#43;文件流的应用



先以几个例子开头吧。


   //示例 1


    std::ofstream test_1(&quot;test_1.txt&quot;);


    test_1 << &quot;hello world&quot; << std::endl;


    test_1.close();   


    //示例 2


    std::ofstream test_2(&quot;.\\test_2.txt&quot;);


    test_2 << &quot;hello world&quot; << std::endl;


    test_2.close();


    //示例 3


    std::ofstream test_3(&quot;..\\test_3.txt&quot;);


    test_3 << &quot;hello world&quot; << std::endl;


    test_3.close();


    //示例 4


    std::ofstream test_4(&quot;d:\\test_4.txt&quot;);


    test_4 << &quot;hello world&quot; << std::endl;


    test_4.close();


说明:


1、上面示例1、示例2是一样的,代表当前路径下面的文件test_1.txt 和test_2.txt。


2、示例3,是相对于当前路径的上一层目录下面的文件test_3.txt。


3、示例4,是绝对路径,就是d:盘下面的 test_4.txt。


4、在用VS调试的时候,当前路径就是 VS工程文件所在的路径。


5、如果是没有在调试状态下运行,当前路径就是“可执行文件”(.exe)或者是“动态库”(dll)所在的路径。


现在分别对示例代码进行说明一下,


例如我上面的示例代码保存在下面文件中:


D:\我的文档\Visual Studio 2005\Projects\Test\Test\test\test2.cpp


我的工程文件所在的路径如下:


D:\我的文档\Visual Studio 2005\Projects\Test\Test\Test.vcproj


那么在用VS调试的时候,


示例1和示例2中的 test_1.txt  和 test_2.txt


就在D:\我的文档\Visual Studio 2005\Projects\Test\Test目录下面


示例3中的test_3.txt在D:\我的文档\Visual Studio 2005\Projects\Test\目录下面。


示例4中的test_4.txt在D:根目录下面


如果我们不是VS调试,直接执行可执行文件,比如,我的可执行文件的路径是:


D:\我的文档\Visual Studio 2005\Projects\Test\debug\ Test.exe


那么,


示例1和示例2中的test_1.txt 和test_2.txt


就在D:\我的文档\Visual Studio 2005\Projects\Test\debug目录下面


示例3中的test_3.txt在D:\我的文档\Visual Studio 2005\Projects\Test目录下面。


示例4中的test_4.txt在D:根目录下面  


Windows路径分隔符的说明:


在之前不是说过,windows的路径分隔符用“\”吗?但是上面的最后三个示例,怎么都用“\\”呢?


那是因为在字符串中,“\”是一个转义字符表示,必须“\\”才能表示一个“\”字符。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-134573-1-1.html 上篇帖子: Windows Server 2008 之 Server Core、IIS7.0 下篇帖子: windows2008 系统盘空间大小与实际文件大小不符的解决
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表