VsCode C++使用相对路径读取文件失败的原因及解决方案
程序员文章站
2022-05-14 20:40:28
...
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'
表示相对路径时就能顺利读取文件了。
以上只是笔者实践时的一点小发现,希望对各位小伙伴有所帮助~(若有文中有误,恳请批评指正!)