用其内容的第一行替换文件的名称

时间:2013-03-26 08:52:02

标签: c++ file filenames rename

我有多个扩展名为* .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");
}

感谢您的帮助 干杯

2 个答案:

答案 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());
}