在 C++ 中使用文件 I/O 从文件中删除特定键
Deleting a specific key from a file using file I/O in C++
string _delete_an_apiKey(int n)
{
string a;
string del;
int cnt = 0;
ofstream f1("tempAPIKeys.dat",ios::app); // Temporary file for executing deletion
ifstream f2(file,ios::in); // Main file containing all the keys
while(!f2.eof())
{
if(cnt != n)
{
f2 >> a;
f1 << a << endl;
}
else
{
f2 >> del;
}
++cnt;
}
f1.close();
f2.close();
remove(fileName);
rename("tempAPIKeys.dat",fileName);
return del;
}
n is basically like an index which is associated with each key
in this case n = 0, meaning delete the first key
在此代码中,我已部分成功地删除了我选择的密钥,但它给出了意外的输出。让我给你一个例子,给出文件的内容:
执行前:
x4pDtc3vI8yHFDar99GUdkPh
0RxLFwFhcyazoZ0zBKmPFR4q
4Haw6HSUQKDhNSxeD0JKMcFT
执行后:
0RxLFwFhcyazoZ0zBKmPFR4q
4Haw6HSUQKDhNSxeD0JKMcFT
4Haw6HSUQKDhNSxeD0JKMcFT
该函数还returns删除的字符串。
现在你可以很容易地看出我删除了第一个密钥,但我不知道为什么最后一个密钥存储了两次。
你的操作顺序有误。你做什么:
- 检查读取是否为 EOF
- 从文件读取
- 使用结果
因此,当到达 EOF 时,您将再次使用最后的结果。
正确顺序:
- 从文件读取
- 检查读取是否为 EOF
- 仅当结果不是 EOF 时才使用结果
此外,您不检查由于其他原因导致读取失败的情况。
你看到 last key 两次的原因是因为 iostream::eof
在读取流末尾后引发,这并不意味着下一次读取将是文件末尾。
在while循环中使用inputStream >> data
,保证读取成功进入循环,如:
while(f2 >> a)
{
if(cnt != n)
{
f1 << a << endl;
}
else
{
del = a;
}
++cnt;
}
string _delete_an_apiKey(int n)
{
string a;
string del;
int cnt = 0;
ofstream f1("tempAPIKeys.dat",ios::app); // Temporary file for executing deletion
ifstream f2(file,ios::in); // Main file containing all the keys
while(!f2.eof())
{
if(cnt != n)
{
f2 >> a;
f1 << a << endl;
}
else
{
f2 >> del;
}
++cnt;
}
f1.close();
f2.close();
remove(fileName);
rename("tempAPIKeys.dat",fileName);
return del;
}
n is basically like an index which is associated with each key
in this case n = 0, meaning delete the first key
在此代码中,我已部分成功地删除了我选择的密钥,但它给出了意外的输出。让我给你一个例子,给出文件的内容:
执行前:
x4pDtc3vI8yHFDar99GUdkPh
0RxLFwFhcyazoZ0zBKmPFR4q
4Haw6HSUQKDhNSxeD0JKMcFT
执行后:
0RxLFwFhcyazoZ0zBKmPFR4q
4Haw6HSUQKDhNSxeD0JKMcFT
4Haw6HSUQKDhNSxeD0JKMcFT
该函数还returns删除的字符串。
现在你可以很容易地看出我删除了第一个密钥,但我不知道为什么最后一个密钥存储了两次。
你的操作顺序有误。你做什么:
- 检查读取是否为 EOF
- 从文件读取
- 使用结果
因此,当到达 EOF 时,您将再次使用最后的结果。
正确顺序:
- 从文件读取
- 检查读取是否为 EOF
- 仅当结果不是 EOF 时才使用结果
此外,您不检查由于其他原因导致读取失败的情况。
你看到 last key 两次的原因是因为 iostream::eof
在读取流末尾后引发,这并不意味着下一次读取将是文件末尾。
在while循环中使用inputStream >> data
,保证读取成功进入循环,如:
while(f2 >> a)
{
if(cnt != n)
{
f1 << a << endl;
}
else
{
del = a;
}
++cnt;
}