C++使用*i指针打开文件,在Linux中覆盖,但在Windows中不覆盖
C++ Opening file with *i pointer, Overrides in Linux but not in Windows
所以我已经让这个程序在Windows中运行了,我正试图让它也在Linux机器上运行。我相信Linux机器运行的是一个过时版本的g++编译器,但这超出了我的控制范围。不管怎样,这就是我的功能:
for (vector<string>::iterator i = groups.begin(); i != groups.end(); ++i)
{
inStream.open((*i + "List.txt").c_str());
while (getline(inStream, next))
{
if (next == n) {
memberOf.push_back(*i);
}
}
inStream.close();
}
问题在于inStream.open()调用。在windows中,这很好,但在Linux中,*i(例如,假设*i指向"Tigers")似乎被覆盖了,因此调用只是在Stream.open("List.txt")中;与inStream.open("TigersList.txt")相反;
我尝试了各种方法来解决这个问题,比如设置字符串k=*I;它本身就起作用,如果我称cout<lt;k上面印着"老虎"。然而,当我试图将"List.txt"连接到最后时,它就会覆盖"Tigers",我只剩下"List.txt"
例如:
k += "List.txt";
k.append("List.txt");
等等。Linux中似乎什么都不起作用,但我尝试过的所有操作在windows中都有相同的(正确的)最终结果。
我做错了什么???
Edit:inStream是一个ifStream对象。memberOf是字符串的另一个向量。
听起来像是从一个包含Windows行尾的文件中读取Tigers
。如果您在Linux中读取此文件,则读取以下行:
Tigersrn
将导致您在内存中的字符串为Tigersr
。然后,当您连接到它时,即使结果实际上是TigersrList.txt
,当您打印出来时,您的终端会将r
视为回车,因此List.txt
会覆盖屏幕上的Tigers
。
当然,打开文件失败是因为文件名不包含嵌入的r
。
要解决此问题,您可以执行以下操作之一:
- 在Linux中,确保要打开的文件具有Linux行结尾(例如,在其上运行
dos2unix
) - 更新程序以查找并丢弃从文件中读取的行末尾的
r
相关文章:
- 在C++/Linux中设置单调时钟的一些技巧
- Linux的Cpp上的计时器
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 在Linux中哪里可以找到互斥、未来等的源代码
- 如何在linux终端中同时编译和运行c++代码
- 在Linux for Windows上编译C++代码时出错
- 如何找到锁定Linux futex的C++行
- 使用ios:ate写入到流会覆盖现有文件
- 在linux上调试巨大的C++项目
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- 我可以重新分配/覆盖std::字符串吗
- c++方法参数只能在linux的发布模式下自行更改
- 在Linux和C++中的Windows上,散列字符串值会产生不同的输出
- 这里在 Linux 中具有"CreatePipe"和"CreateProcessW"功能吗?
- 输出字符串使用 C++ 覆盖 Linux 终端上的最后一个字符串
- 检测 Linux 上多线程C++应用程序中的堆栈溢出/覆盖
- C/C++ Linux 共享库能否通过将磁盘上自己的文件覆盖到较新版本来自动更新
- C++使用*i指针打开文件,在Linux中覆盖,但在Windows中不覆盖
- Linux护士覆盖由box()创建的边界
- 如何在拖动窗口时覆盖默认的 linux Alt+鼠标行为