0

我有一个具有以下代码的 c++ 应用程序:

for (int i = 0; i < ALL_EPID_CERTS_LENGTH; i++)
            {
            std::ifstream file(; 
            file.open(path.append(ALL_EPID_CERTS_1_0[i]), std::ios::in | std::ios::binary); 
            if(file.is_open()) 
            {
                // get the length of the file 
                file.seekg(0, ios::end); 
                size_t fileSize = file.tellg(); 
                file.seekg(0, ios::beg);
                // create a vector to hold all the bytes in the file
                vector<byte> data(fileSize, 0);
                // read the file
                file.read(reinterpret_cast<char*>(&data[0]), fileSize);             
                byte *tempCerts = new byte[data.size()+1];
                memset(tempCerts,0,fileSize+1);
                std::copy(data.begin(), data.begin()+(data.size()), tempCerts);
                // !!!!check if NULL and place for NULL are needed
                for (int j = 0; j < data.size(); j++)
                {
                    list.push_back(tempCerts[j]);
                }
                file.close();
            }
            }

在第一次迭代中,循环执行预期,但由于第二次 - file.is_open() 返回 false。所有文件都存在。你能解释一下我有什么问题吗???

4

2 回答 2

9

你做path.append的 - 是什么path?您期望它在第一次迭代之后是什么 -ALL_EPID_CERTS_1_0[1]附加到它可以ALL_EPID_CERTS_1_0[0]吗?

于 2013-03-21T17:02:38.643 回答
0

关闭流后可能需要调用infile.clear();清除状态位,否则无法打开具有相同流的新文件。

另外:您确定需要在每次迭代时附加到路径吗?每次追加调用后输出路径变量并检查路径是否正确。我希望在第二次迭代中,路径字符串看起来像这样:“c:/some/path/file1.txtfile2.txt”

在这种情况下,我会使用 stringstreamorsprintf来生成路径,并确保不要更改路径变量。

于 2013-03-21T17:15:35.117 回答