0

我有多个扩展名为 *.txt 的文件,在这些文件中我想读取它们的第一行并重命名为文件名。

例如:文件.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");
}

感谢帮助干杯

4

2 回答 2

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());
}
于 2013-03-26T09:13:37.393 回答
1

您不会newname以任何方式进行初始化。这就是问题。

你想要这样的东西:

result= rename(oldname , test[0].c_str());

(并删除newname)。

在您的代码newname中完全未初始化,因此您在文件名中看到随机字符。

于 2013-03-26T08:56:12.350 回答