C++ 不读取所有文件

C++ 不读取所有文件,c++,encryption,C++,Encryption,我试图用一个简单的解密算法来解密一些文件。到目前为止,我的代码大部分都能正常工作,但在几百字节后停止读取并导出它所拥有的内容。 例如,我有一个.X文件,它是14.7KB。我通过程序运行它,结果是643字节。 当前代码如下: 因为这个网站的代码格式让我发疯 我只是在现有代码中添加了算法,所以大部分都没有使用 编辑: 因此,如果(t+=251-((i*14)&255))的结果是字符范围内的任何值,则需要将文件作为“二进制”文件进行读写,否则内容将无法“工作” 这意味着您需要使用stream::rea

我试图用一个简单的解密算法来解密一些文件。到目前为止,我的代码大部分都能正常工作,但在几百字节后停止读取并导出它所拥有的内容。 例如,我有一个.X文件,它是14.7KB。我通过程序运行它,结果是643字节。 当前代码如下: 因为这个网站的代码格式让我发疯

我只是在现有代码中添加了算法,所以大部分都没有使用

编辑:


因此,如果
(t+=251-((i*14)&255))
的结果是字符范围内的任何值,则需要将文件作为“二进制”文件进行读写,否则内容将无法“工作”

这意味着您需要使用
stream::read
读取数据块和
stream::write
将数据写入输出文件,并且在打开文件时,需要分别提供
ifstream::binary
of stream::binary
作为模式


文本输入(在模式中未指定
binary
时)将某些输入字节解释为
end of file
(停止输入),其他输入字节解释为
newline
字符(如果使用
getline
,输入时将忽略这些字符)。因为在加密的表单中,您不应该使用这些字符来表示这些内容,所以不应该使用基于文本的输入(加密的文件不是文本文件)

我猜这个文件是“二进制的”,你试图把它读成文本…请把有趣的部分贴在这里,你不能期望我们浏览一行又一行未使用的代码…在这个网站上格式化代码并不难;突出显示代码,然后按ctrl+kIt,现在可以读取整个文件,但只有文件的开头部分被解密。对不起,如果不了解代码中的错误位置,我不能说。我敢肯定,在XML文档中存储二进制数据“就像它是文本一样”通常是个坏主意。你可能至少想发布你的新代码…@matstpeterson我不认为他在用XML存储未替换的二进制文件;看起来XML本身是从二进制文件中“解密”出来的。我刚刚在“in.open(filename)”和“out.open(filename)”中的文件名后面添加了“、ios::binary”,所以您完全忽略了关于“使用读写从文件中获取数据,然后…”的部分-getline在非“行”的情况下不起作用-特别是如果您的输入看起来像换行符,但在解密过程中它实际上应该转换为完全不同的字符-但是它正在丢失,因为getline正在“跳过它”。
    cout << "Enter the name of your file to " << encrypt_decrypt[choice-1] << ": ";
    cin >> filename;
    in.open(filename);

    getline(in,buffer);

    void encryptdecrypt(const string buffer,const char map[],int len,string& newbuffer)
    {
    int i=0;
    char t;
    char code;
    for (i=0;i<buffer.length();i++)
    {
            t=buffer[i];
            (t += 251 - ((i * 14) & 255));
            cout << "Buffer length: " << buffer.length() << endl;
            cout << "newbuffer length: " << newbuffer.length() << endl;
            newbuffer.push_back(t);
    }
    newbuffer.push_back('\n');
    }
    out << newbuffer;
<?xml version="1.0"?>
<Materi
+"Òû%÷*&$'
ëÐ!ÐÎ&"# ëÐ"!Ý "

Ü"ÐÎÝ컸