首页 \ 问答 \ 如何从std :: filesystem :: path中删除引号(How to remove quotation marks from std::filesystem::path)

如何从std :: filesystem :: path中删除引号(How to remove quotation marks from std::filesystem::path)

如果我使用absolute()函数,我总是会得到一个包含引号的路径。

在文件系统函数中有没有办法删除这个引号,使它能够用于例如std :: ifstream?

  fs::path p2 { "./test/hallo.txt" };
  std::cout << "absolte to file : " << fs::absolute(p2) << std::endl;

收益:

"/home/bla/blub/./test/hallo.txt"

我需要

/home/bla/blub/./test/hallo.txt

代替。

手动执行它是没有问题的,但我想问问在文件系统库中是否有方法。


If I use functions like absolute() I always get a path which contains quotation marks.

Is there a way within the filesystem functions to remove this quotation marks which enables it to use with e.g. std::ifstream?

  fs::path p2 { "./test/hallo.txt" };
  std::cout << "absolte to file : " << fs::absolute(p2) << std::endl;

returns:

"/home/bla/blub/./test/hallo.txt"

I need

/home/bla/blub/./test/hallo.txt

instead.

It is no problem to do it manually, but I want to ask if there is a method inside the filesystem lib.


原文:https://stackoverflow.com/questions/43659629
更新时间:2020-08-03 06:01

最满意答案

std::operator << (std::filesystem::path const &)指定如下:

在路径p上执行流输入或输出。 std::quoted ,以便稍后通过流输入运算符读取空格时不会截断[sic]。

所以这是流式传输路径时的预期行为。 你需要的是path::string()

以本地路径名格式返回内部路径名,转换为特定的字符串类型。

std::cout << "absolte to file : " << absolute(p2).string() << std::endl;
//                                               ^^^^^^^^^

我也删除了fs::因为absolute可以通过ADL找到。


std::operator << (std::filesystem::path const &) is specified as follows:

Performs stream input or output on the path p. std::quoted is used so that spaces are not truncation[sic] when later read by stream input operator.

So this is expected behaviour when streaming a path. What you need is path::string():

Returns the internal pathname in native pathname format, converted to specific string type.

std::cout << "absolte to file : " << absolute(p2).string() << std::endl;
//                                               ^^^^^^^^^

I've also removed fs:: since absolute can be found via ADL.

2017-04-27

相关问答

更多

`std :: filesystem :: path`没有标准哈希值吗?(Is there no standard hash for `std::filesystem::path`?)

由于std::filesystem::hash_value是标准的一部分,为什么不编译这段代码而不必提供我自己的std::hash ? 是的,有一个fs::hash_value()但是没有std::hash<fs::path> ,这就是你需要的。 这就是为什么它不编译。 至于为什么图书馆提供前者功能而不是后者,我引用Billy O'Neal (MSVC标准库的实现者): 看起来像一个缺陷。 但是,将路径作为键放在哈希表中几乎肯定是不正确的; 您需要在大多数此类方案中测试路径等效性。 也就是说, " ...

为什么std :: filesystem提供如此多的非成员函数?(Why does std::filesystem provide so many non-member functions?)

已经发布了一些好的答案,但他们没有深入到问题的核心:所有其他的事情都是平等的,如果你可以实现某种东西作为一个免费的,非朋友的功能,你应该总是这样做。 为什么? 因为免费的非朋友功能,没有特权访问状态。 测试类比测试函数要困难得多,因为您必须说服自己,无论调用哪个成员函数,甚至是成员函数的组合,都可以维护类的不变量。 您拥有的会员/朋友功能越多,您需要做的工作就越多。 免费功能可以独立推理和测试。 因为他们没有特权访问类的状态,所以他们不可能违反任何类的不变式。 我不知道什么是不变量以及什么特权访问 ...

boost :: filesystem :: path和std :: string(boost::filesystem::path and std::string)

在你的构造函数中: String (std::string s)应该是String (const std::string& s) in your constructor: String (std::string s) should be String (const std::string& s)

删除对boost :: filesystem :: current_path()的依赖(Remove dependency on boost::filesystem::current_path())

我建议你从Boost获取源代码 ,适应/解密它并继续前进。 它只不过是getcwd() (POSIX)和GetCurrentDirectoryW (Windows)的包装器。 稍后当std::filesystem::current_path()变得广泛可用时,你可以将它抛出。 如果您想知道BOOST_POSIX_API是如何设置的(在方法中引用),请看一下这个片段: # if defined(_WIN32) || defined(__CYGWIN__) // Windows default, in ...

为什么std :: bind不能使用std :: filesystem :: path和std :: ostream?(Why wont std::bind work with a std::filesystem::path and std::ostream?)

默认情况下,复制通过std::bind的参数。 std::cout是不可复制的。 你需要使用std::ref 。 auto function = std::bind(&Buggy::something, std::placeholders::_1, std::ref(std::cout)); 就个人而言,我会避免使用std::bind并使用lambda表达式。 auto function = [](auto&& path){ return Buggy::something(path, std:: ...

如何从std :: filesystem :: path中删除引号(How to remove quotation marks from std::filesystem::path)

std::operator << (std::filesystem::path const &)指定如下: 在路径p上执行流输入或输出。 std::quoted ,以便稍后通过流输入运算符读取空格时不会截断[sic]。 所以这是流式传输路径时的预期行为。 你需要的是path::string() : 以本地路径名格式返回内部路径名,转换为特定的字符串类型。 std::cout << "absolte to file : " << absolute(p2).string() << std::endl; ...

使用boost :: filesystem :: path作为std :: map中的键(Using boost::filesystem::path as a key in an std::map)

要使路径可比,您需要将它们转换为规范表示,然后通过字符串进行比较。 规范路径是绝对的,规范化的并且删除了符号链接。 Boost提供规范的AFAIK。 由于需要解析符号链接,因此调用规范需要访问文件系统。 To make paths comparable you need to convert them to the canonical representation and then compare via string. A canonical path is absolute, normaliz ...

C ++如何知道“引号”是一个std :: string之间的任何东西?(How does C++ know anything between “quotation marks” is a std::string?)

让我们澄清一些误解。 字符串文字的类型是一个const char[] , 而不是 std::string 。 例如, "this"的类型是const char[5] (有一个空终止符)。 这是否意味着std::string是C ++必须在引号之间解释文本的唯一方式? 否(它不是std::string ),并且utf-8字符串和宽字符字符串有多个前缀,如L"wide" 。 那么标准库不会只是一个扩展,而是C ++的一部分。 这是真的,但不适用于字符串文字。 你有nullptr的类型是std::nul ...

如何删除未闭合引号内的引号(how to remove quotation marks inside unclosed quotations marks)

试试这个正则表达式(?<!^)"(?!$) 。 此正则表达式不匹配字符串开头和结尾的双引号。 看看这里,并在右侧提供的链接阅读更多有关正则表达式的解释。 Try this regex (?<!^)"(?!$). This regex will not match double quotes at the beginning and end of the string. Check out here and read more explanation about regex in the link ...

从对象中删除引号(Remove quotation marks from an object)

首先我要说根据输入的来源做这个是危险的,但如果你绝对需要运行字符串中包含的任意ruby代码,你会使用eval : http://ruby-doc.org/core-2.2.2/Kernel.html#method-i-eval 同样,如果可能的话,我会避免评估字符串。 First I would say that it's dangerous to do this based on where your input is coming from, but if you absolutely nee ...

相关文章

更多

最新问答

更多
  • 提交的编译错误 - UVA(Compilation error for submission - UVA)
  • 在Windows中编译Qt时出现致命错误(Fatal error when compiling Qt in Windows)
  • 如何在bootstrap 3中垂直居中文本?(How to vertically center text in bootstrap 3?)
  • 使用管道时“文件名,目录名称或卷标语法不正确”。(When using pipe getting “The filename, directory name, or volume label syntax is incorrect.”)
  • Node中的Mustache和Express(Mustache and Express in Node)
  • 插入数据库错误SQLSTATE [HY093](insert into database error SQLSTATE[HY093])
  • 将支持页面添加到Web Store扩展页面(Adding Support Page to Web Store Extension Page)
  • expressjs TypeError:无法设置undefined的属性'session'(expressjs TypeError: Cannot set property 'session' of undefined)
  • ASP.Net Web表单友好的URL无法在服务器上运行(ASP.Net Web Forms Friendly URLs not working on server)
  • 捕获表标记内的类并捕获多个项目(Capturing a class inside a table tag and capturing multiple items)
  • 使用输入框填充剩余的DIV标签空间高度(Fill the rest of DIV tag space height with Input Box)
  • Angular2输入调用两次方法(Angular2 Input call twice a method)
  • 使用回旋镖解析整数列表(Parse a list of integers using boomerang)
  • SWT:如何正确对齐工具栏中的项目(SWT: How to right align items in a toolbar)
  • 从所有客户中选择Rails中的最后一条记录(Select from all customers the last record in Rails)
  • 从一个模型到另一个模型的引用var返回Backbone中的默认值(Reference var from one model to another returns defaults in Backbone)
  • 如何允许在android ndk中使用make_shared(how to allow using make_shared in android ndk)
  • 正则表达式 - 从字符串中删除数字[关闭](Regex - delete numbers from string [closed])
  • Python中的递归和列表(Recursion and lists in Python)
  • 我需要编写window.onload = function()来使Javascript工作(I need to write window.onload=function() for Javascript to work)
  • 如何为泛型方法创建委托?(How to create a delegate for a generic method?)
  • Nutch和Elasticsearch 1.1.1(Nutch and Elasticsearch 1.1.1)
  • 如何将arraylist与我的对象相关联?(How to associate an arraylist with my object? [closed])
  • 在C中查找重定向输入文件中的文件结尾(Finding End of File in the Redirected Input file in C)
  • 将三个文件的内容合并为一个(joining the contents of three files into one)
  • 成员函数和类名之间的名称冲突(Name conflict between member function and class name)
  • 如何在laravel 5.3中获取参数?(How to get parameter in laravel 5.3?)
  • 使用带结构的地图作为键 - 值不保存[重复](Using map with structure as key - value doesn't save [duplicate])
  • SQL结果按周,日分组(SQL results grouped by Weeks, Day)
  • 如何检查字符串是否在文件中(How to check if a string is in a file)