我有多个扩展名为* .txt的文件,在这些文件中我想读取他们的第一行并重命名为文件名。
例如:file.txt
在此文件中,第一行是:X_1_1.1.X_1_X
并将其重命名为:X_1_1.1.X_1_X.txt
我已经从其他项目重写了这段代码,但它将我的文件重命名为随机字母,并且不知道如何纠正它
#include<iostream>
#include<fstream>
using namespace std;
int main()
{
int size=28000;
string *test = new string[rozmiar];
std::fstream file;
std::string line;
file.open("C:\\file.txt",std::ios::in);
int line_number=0;
while((file.eof() != 1))
{
getline(file, line);
test[line_number]=line;
line_number++;
}
file.close();
cout << "Enter line number in the file to be read: \n";
cin >> line_number;
cout << "\nYour line number is:";
cout << test[0] << " \n";
char newname[25];
test[0]=newname;
int result;
char oldname[] ="C:\\file.txt";
result= rename(oldname , newname);
if (result == 0)
puts ("File successfully renamed");
else
perror("Error renaming file");
}
感谢您的帮助 干杯
答案 0 :(得分:1)
您不以任何方式初始化newname
。这就是问题所在。
你想要这样的东西:
result= rename(oldname , test[0].c_str());
(并删除newname
)。
在您的代码中newname
完全未初始化,因此您会在文件名中看到随机字符。
答案 1 :(得分:1)
不能直接回答您的代码,因为它看起来已经被处理了,但是这应该做你想要的,假设你只需要第一行(没有错误检查)
#include <fstream>
#include <string>
int main()
{
static std::string const filename("./test.txt");
std::string line;
{
std::ifstream file(filename.c_str()); // c_str() not needed if using C++11
getline(file, line);
}
rename(filename.c_str(), (line + ".txt").c_str());
}