此分配的伪代码是必要的: 1.以二进制模式打开指定的文件。2.将文件名保存在fileNames数组中。3.使用seekg和tellg 4确定文件大小。在一条语句5中将文件内容读入字符数组。关闭文件6。通过数组循环一次一个字符,并累积每个字节7的和,并将和存储到checkSums数组中。
#include <iostream>
#include <string>
#include <iomanip>
#include <fstream>
#include <cstring>
using namespace std;
int main()
{
//declare variables
string filePath;
void savefile();
char choice;
int i, a, b, sum;
sum = 0;
a = 0;
b = 0;
ifstream inFile;
//arrays
const int SUM_ARR_SZ = 100;
string fileNames[SUM_ARR_SZ];
unsigned int checkSums[SUM_ARR_SZ];
do {
cout << "Please select: " << endl;
cout << " A) Compute checksum of specified file" << endl;
cout << " B) Verify integrity of specified file" << endl;
cout << " Q) Quit" << endl;
cin >> choice;
if (choice == 'a' || choice == 'A')
{
//open file in binary mode
cout << "Specify the file path: " << endl;
cin >> filePath;
inFile.open(filePath.c_str(), ios::binary);
//save file name
fileNames[a] = filePath;
a++;
//use seekg and tellg to determine file size
char Arr[100000];
inFile.seekg(0, ios_base::end);
int fileLen = inFile.tellg();
inFile.seekg(0, ios_base::beg);
inFile.read(Arr, fileLen);
inFile.close();
for (i = 0; i < 100000; i++)
{
sum += Arr[i];
}
//store the sum into checkSums array
checkSums[b] = sum;
b++;
cout << " File checksum = " << sum << endl;
}
if (choice == 'b' || choice == 'B')
{
cout << "Specify the file path: " << endl;
cin >> filePath;
if (strcmp(filePath.c_str(), fileNames[a].c_str()) == 0)
{
}
}
} while (choice != 'q' && choice != 'Q');
system("pause");
}我得到了"-540000“这样的值,我不知道如何解决这个问题。任何帮助都是非常感谢的!
发布于 2015-11-19 03:01:43
Arr将包含“垃圾”数据。strcmp,则不需要调用C的string,然后使用string::compare。https://stackoverflow.com/questions/33794412
复制相似问题