相关疑难解决方法(0)

将文本文件的内容追加到C++中的另一个文件中

如何打开文本文件并将其所有行附加到C++中的另一个文本文件?我主要找到解决方案,用于从文件到字符串的单独读取,以及从字符串写入文件.这可以优雅地结合在一起吗?

并不总是给出两个文件都存在.访问每个文件时应该有一个bool返回.

如果这已经偏离主题,我很抱歉:将文本内容附加到文件中是否存在冲突,这意味着多个程序可以同时执行此操作(行的顺序无关紧要)?如果不是,什么是(原子)替代品?

c++ file atomic append fwrite

2
推荐指数
1
解决办法
6513
查看次数

QT - QFile复制操作极其缓慢

我正在开发一个应用程序,需要使用QT(5.6.1)将大量文件从一个文件夹复制到另一个文件夹

为此,我一直在使用这种QFile::copy()方法.这样做很有效,除了一件事:它非常慢.使用Windows资源管理器执行相同的复制操作所需的时间超过两倍.

想知道为什么会这样,我挖了QT源代码,我发现了这个qfile.cpp,看起来很相关:

char block[4096];
qint64 totalRead = 0;
while(!atEnd()) {
    qint64 in = read(block, sizeof(block));
    if (in <= 0)
        break;
    totalRead += in;
    if(in != out.write(block, in)) {
        close();
        d->setError(QFile::CopyError, tr("Failure to write block"));
        error = true;
        break;
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,据我所知,复制操作使用4096字节的缓冲区.这对于复制操作来说非常小,很可能是问题的原因.所以我做的是将缓冲区的大小更改为:

char block[4194304]; // 4MB buffer
Run Code Online (Sandbox Code Playgroud)

然后我重建了整个QT库以包含此更改.但是,所有的修改都完全打破了这个方法.现在,当我的应用程序尝试调用QFile :: Copy()时,操作立即中断(方法甚至没有开始运行,根据QtCreator的调试器在第一行之前停止).调试器告诉我:

The inferior stopped because it received a signal from the Operating System.

Signal name :
SIGSEGV
Signal meaning :
Segmentation fault
Run Code Online (Sandbox Code Playgroud)

我的c …

c++ qt qfile

2
推荐指数
1
解决办法
712
查看次数

找不到cstdio.h

全部,原谅我是C++世界的新手,我在这里找到了一个复制文件源代码.

帖子中的第一个样本使用了ANSI C库.所以我想在我的电脑上测试这个样本.但我发现在我的c ++项目中有错误说Can not open the source file cstdio.h.我没有在我的c:磁盘中找到它.我需要安装windows sdk吗?BTW.我的项目是一个WDK项目.谢谢.

c++

0
推荐指数
1
解决办法
3894
查看次数

有人能告诉我为什么复制这样的文件不起作用?

我试图逐字节复制exe文件.我比较了2的hex文件,它们是完全不同的.似乎有些值没有被加载..

#include <iostream>
#include <fstream>
#include <vector>

using namespace std;

int main(){

    ifstream fin("file.exe", ifstream::binary);
    vector<char> buffer(1, 0);


    ofstream newfile;
    newfile.open("newfile.exe", ios::binary);

    while (fin.read(buffer.data(), buffer.size())){
        streamsize s = fin.gcount();
        for (int i = 0; i < buffer.size(); i++){
            if (buffer[i] != EOF){
                newfile << buffer[i];
                cout << buffer[i] << endl;
            } else {
                break;
            }

        }
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ windows copy file

0
推荐指数
1
解决办法
86
查看次数

我的C++代码是否处理100GB +文件复制?

我需要一个跨平台的便携式功能,能够将100GB +二进制文件复制到新目的地.我的第一个解决方案是:

void copy(const string &src, const string &dst)
{
    FILE *f;
    char *buf;
    long len;

    f = fopen(src.c_str(), "rb");
    fseek(f, 0, SEEK_END);
    len = ftell(f);
    rewind(f);

    buf = (char *) malloc((len+1) * sizeof(char));
    fread(buf, len, 1, f);
    fclose(f);

    f = fopen(dst.c_str(), "a");
    fwrite(buf, len, 1, f);
    fclose(f);
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,该计划非常缓慢.我怀疑缓冲区必须在内存中保持100GB +.我很想尝试新代码(从一个健全,安全,有效的方式复制文件):

std::ifstream src_(src, std::ios::binary);
std::ofstream dst_ = std::ofstream(dst, std::ios::binary);
dst_ << src_.rdbuf();
src_.close();
dst_.close();
Run Code Online (Sandbox Code Playgroud)

我的问题是关于这一行:

dst_ << src_.rdbuf();

C++标准对此有何评论?代码是编译为逐字节传输还是只是整个缓冲区传输(就像我的第一个例子)?

我很好奇<<编译成对我有用的东西?也许我不必把时间花在其他事情上,让编译器在运营商内部完成工作?如果操作员转换为我的循环,我为什么要自己做?

PS:std::filesystem::copy不可能,因为代码必须适用于C++ 11.

c++

-2
推荐指数
2
解决办法
149
查看次数

标签 统计

c++ ×5

file ×2

append ×1

atomic ×1

copy ×1

fwrite ×1

qfile ×1

qt ×1

windows ×1