【发布时间】:2021-02-15 05:09:41
【问题描述】:
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 基本上就像一个与每个键相关联的索引
在这种情况下 n = 0,意味着删除第一个键
在这段代码中,我部分成功地删除了我选择的键,但它给出了意外的输出。让我举个例子,给出文件的内容:
执行前:
x4pDtc3vI8yHFDar99GUdkPh
0RxLFwFhcyazoZ0zBKmPFR4q
4Haw6HSUQKDhNSxeD0JKMcFT
执行后:
0RxLFwFhcyazoZ0zBKmPFR4q
4Haw6HSUQKDhNSxeD0JKMcFT
4Haw6HSUQKDhNSxeD0JKMcFT
该函数还返回删除的字符串。
现在您可以很容易地看出我已经删除了第一个密钥,但我不知道为什么最后一个密钥被存储了两次。
【问题讨论】:
-
附带说明,您对
while(!f2.eof())的使用看起来像wrong,您应该在读取成功之前检查,然后再使用“读取”。 -
_delete_an_apiKey该名称为全局命名空间中的语言实现保留。如果你定义了这样的函数,程序的行为将是不确定的。您应该为该函数使用另一个名称。 -
@eerorika 我很抱歉函数命名,一旦它开始运行我会更正
标签: c++ string file-handling