- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我正在为学校项目编写自己的自定义 FTP 客户端。我设法让所有的东西都能与蜂拥而至的 FTP 客户端一起工作,并且正在处理最后一小部分……将 .part 文件读入主文件。我需要做两件事。 (1) 得到这个来读取每个文件并正确写入最终文件 (2) 在我完成每个文件后删除部分文件的命令。
有人可以帮我修复我在下面写的连接函数吗?我认为我有权读取每个文件直到 EOF,然后继续下一个文件。
在这种情况下,*numOfThreads
是 17。最终得到一个 4742442 字节而不是 594542592 字节的文件。谢谢,我很乐意提供任何其他有用的信息。
编辑:修改下面评论的代码。
std::string s = "Fedora-15-x86_64-Live-Desktop.iso";
std::ofstream out;
out.open(s.c_str(), std::ios::out);
for (int i = 0; i < 17; ++i)
{
std::ifstream in;
std::ostringstream convert;
convert << i;
std::string t = s + ".part" + convert.str();
in.open(t.c_str(), std::ios::in | std::ios::binary);
int size = 32*1024;
char *tempBuffer = new char[size];
if (in.good())
{
while (in.read(tempBuffer, size))
out.write(tempBuffer, in.gcount());
}
delete [] tempBuffer;
in.close();
}
out.close();
return 0;
最佳答案
几乎您复制循环中的所有内容都有问题。
while (!in.eof())
这个坏了。没什么可说的了。
bzero(tempBuffer, size);
这相当无害,但完全没有意义。
in.read(tempBuffer, size);
这是“几乎”的部分——即没有明显损坏的那一部分。
out.write(tempBuffer, strlen(tempBuffer));
您不想使用 strlen
来确定长度——它仅适用于以 NUL 结尾(C 风格)的字符串。如果(显然是这种情况)您读取的数据可能包含零字节(而不是仅使用零字节来表示字符串的结尾),这只会产生错误的大小。
你通常想要做的是像这样的循环:
while (read(some_amount) == succeeded)
write(amount that was read);
在 C++ 中通常是这样的:
while (infile.read(buffer, buffer_size))
outfile.write(buffer, infile.gcount());
可能还值得注意的是,由于您使用 new
为缓冲区分配内存,但从未使用 delete
,因此您的函数正在泄漏内存。可能最好不要为此使用 new
—— 数组或 vector 显然是这里的替代品。
编辑:至于为什么 while (infile.read(...))
有效,read
返回对流的引用。流依次提供到 bool
(在 C++11 中)或 void *
(在 C++03 中)的转换,可以解释为 bool 值。该转换运算符返回流的状态,因此如果读取失败,它将被解释为 false
,但只要成功,它就会被解释为 true
。
关于c++ - 读取 .part 文件并将它们全部连接起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14847180/
我正在尝试执行 vagrant up 但一直遇到此错误: ==> default: IOError: [Errno 13] Permission denied: '/usr/local/lib/pyt
我在容器 div 中有一系列动态创建的不同高度的 div。 Varying text... Varying text... Varying text... Varying text.
通过 cygwin 运行 vagrant up 时遇到以下错误。 stderr: /bin/bash: /home/vagrant/.ansible/tmp/ansible-tmp-14872260
今天要向小伙伴们介绍的是一个能够快速地把数据制作成可视化、交互页面的 Python 框架:Streamlit,分分钟让你的数据动起来! 犹记得我在做机器学习和数据分析方面的毕设时,
我是 vagrant 的新手,正在尝试将第二个磁盘添加到我正在用 vagrant 制作的虚拟机中。 我想出了如何在第一次启动虚拟机时连接磁盘,但是当我关闭机器时 然后再次备份(使用 'vagrant
我是一名优秀的程序员,十分优秀!