0

拡張子が*.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");
}

助けてくれてありがとう乾杯

4

2 に答える 2

1

いかなる方法でも初期化することはありませんnewname。これが問題です。

あなたはこのようなものが欲しいです:

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

(そして削除しnewnameます)。

コードnewnameでは完全に初期化されていないため、ファイル名にランダムな文字が含まれています。

于 2013-03-26T08:56:12.350 に答える
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 に答える