VsCode C++使用相对路径读取文件失败的原因及解决方案

VsCode C++使用相对路径读取文件失败的原因及解决方案

1. 读取失败的原因

文件读取失败的原因之一便是文件路径错误,这里的错误包含两个方面:一个是路径中的某个文件夹或者该文件的命名写错;另一个是在使用相对路径时,往往搞不清楚到底相对哪个文件路径
在使用相对路径打开文本文件时,我们一般将读取的文本文件放在源代码所在的文件夹下,路径字符串通常写成如下形式:

string path = './data.txt'

一般来说这样不会出错,文件能够顺利读取。然而,在VsCode中,path存储的路径是不正确的,./并非我们认为的当前源文件所在的目录,此时真正的相对路径是launch.json文件中键名为"cwd"的对应值,如下所示。

{
    
    
    "version": "0.2.0",
    "configurations": [
 
        {
    
    
            "name": "(gdb) Launch",
            "preLaunchTask": "g++.exe build active file",
            "type": "cppdbg",//只能为cppdbg
            // ...
            "cwd": "${workspaceFolder}", // 决定了相对路径
            "environment": [],
            "externalConsole": true,
            // 省略了部分键
        }
    ]
}

从中我们可知,"cwd": "${workspaceFolder}",它表示此时的目标工作路径是环境变量workspaceFolder,意为打开的Workspace文件夹,并非源代码所在的目录。
这里附上常见的环境变量及其意义:

$ {workspaceFolder} -在VS Code中打开的文件夹的路径
$ {workspaceFolderBasename} -在VS Code中打开的文件夹名称,不带任何斜杠(/)
$ {file} -当前打开的文件
$ {relativeFile} -当前相对于打开的文件workspaceFolder
$ {relativeFileDirname} -当前打开的文件相对于的目录名workspaceFolder
$ {fileBasename} -当前打开的文件的基本名称
$ {fileBasenameNoExtension} -当前打开的文件的基本名称,没有文件扩展名
$ {fileDirname} -当前打开的文件的目录名
$ {fileExtname} -当前打开的文件的扩展名
$ {cwd} -启动时任务运行器的当前工作目录
$ {lineNumber} -活动文件中当前选择的行号
$ {selectedText} -活动文件中的当前选定文本
$ {execPath} -正在运行的VS Code可执行文件的路径
$ {defaultBuildTask} -默认构建任务的名称

2. 解决方案

结合相关环境变量的意义,我们将launch.json文件中的"cwd"对应的值改为${fileDirname}即可,即"cwd": "${fileDirname}",,意为当前打开的文件的目录名,这样,我们把待读取的文本文件和源代码放在一块时,使用string path='./data.txt'string path='data.txt'表示相对路径时就能顺利读取文件了。

以上只是笔者实践时的一点小发现,希望对各位小伙伴有所帮助~(若有文中有误,恳请批评指正!)

猜你喜欢

转载自blog.csdn.net/weixin_42430021/article/details/121375445