如下代码,在启动参数中传一个路径,如果路径没有空格,像这样的路径 D:\protobuf-3.21.5 直接传过去就行,但有一些特例,如果路径中有空格的话像这样的路径 D:\visual stdio 2017代码 ,编译时就会发生崩溃,什么原因呢?原因就是仔细观察中间有两个空格。在程序中调用cmd命令打开一个文件,而文件路径带有空格,如果直接把路径传给cmd,那么cmd就会把路径空格前面的部分当做是一个参数,空格后当做另一个参数,导致程序出错,解决方法是把传入的参数前后添加双引号。
“D:\visual stdio 2017” 这样就可以了。
#include"ReadFile.h"
#include"ReadFileRow.h"
#include"WriteToCsv.h"
int main(int argc, char** argv) {
if (argc > 1){
ReadFile rd;
std::string str(argv[1]);
rd.Test(str);
ReadFileRow rf;
rf.Test(str);
}
else{
std::cerr << "error:need a dir\n";
return -1;
}
return 0;
}
Windows 命令提示符和PowerShell等命令行环境使用空格分隔命令和参数,但文件和文件夹名称也可以包含空格。要指定带有空格的文件路径,您需要“转义”它。
命令行 101:为什么必须转义空格。
“转义”字符会改变其含义。例如,转义空格将导致 shell 将其视为标准空格字符,而不是分隔命令行参数的特殊字符。
例如,假设您有一个要查看其内容的文本文件。您可以使用 type 命令执行此操作。假设文本文件位于,命令提示符中的以下命令将显示其内容:
C:\Test\File.txt。
键入 C:\Test\File.txt。
伟大的。现在,如果您有相同的文件怎么办?如果您尝试运行以下命令,它将不起作用——文件路径中的那些空格会妨碍您。
C:\Test Folder\Test File.txt。
键入 C:\Test Folder\Test File.txt。
命令行认为您正在尝试查找名为的文件 并说它“找不到指定的路径”。
在 Windows 上转义空间的三种方法
您可以通过三种不同的方式在 Windows 上转义文件路径:
我们将向您展示如何使用每种方法。
如果您愿意,您实际上可以用引号将路径的一部分括起来。例如,假设您在该文件夹中有一个名为 File.txt 的文件。您可以运行以下命令:
键入 C:“测试文件夹”\File.txt。
但是,这不是必须的——在大多数情况下,您可以只在整个路径周围使用引号。