Zmiana nazwy pliku na ciąg znaków w pliku

Witam.

Mam bardzo dużo plików tekstowych w różnych folderach w których potrzebuje zmienić nazwę na taka jaka znajduje się w każdym z nich w ich pierwszej linii

Dla przykładu mam plik:

file.txt

W nim jego pierwsza linia to:

X_1_1.1.X_1_X

Chce by program odczytywał ta pierwsza linie i zmieniał ja z file.txt na X_1_1.1.X_1_X.txt

Napisałem pomagając sobie innymi przykładowymi programami ale niżej napisany program zmienia nazwę pliku na jakieś losowe znaki. Gdzie tkwi błąd i jak go naprawić? Przy okazji co zmienić by program odczytał wszystkie pliki w danym katalogu oraz ich podkatalogach bo mam ustawiona na sztywno ścieżkę lub tylko wszystkie pliki z danym rozszerzeniem, tutaj w tym przypadku *.txt

#include

#include


using namespace std;

int main()

{

	int rozmiar=28000;

	string *test = new string[rozmiar];

	std::fstream plik;

	std::string line;

	plik.open("C:\\plik.txt",std::ios::in);	

	int numer_lini=0;

	while((plik.eof() != 1))

	{

		getline(plik, line);

		test[numer_lini]=line;

		numer_lini++;

	}

	plik.close();

	cout<<"Podaj numer wiersza do odczytania: \n";

	cin>>numer_lini;

	cout<
	char newname[25];

	test[0]=newname;

	int result;

	char oldname[] ="C:\\plik.txt";

//	char newname[] ="C:\\plik1.txt";

	result= rename( oldname , newname );

}

Z góry dziękuje za sugestie i pomoc.

#include

#include

#include 

using namespace std;


int main(int n,char *p[])

  {

   if(n<2) cout<<"podaj nazwy plikow w parametrach"<
   for(int i=1;i
      {

       ifstream plik(p[i],ios::in);

       string newname;

       getline(plik,newname);

       plik.close();

       newname+=".txt";

       rename(p[i],newname.c_str());

     }

   return 0;

  }

poza tym możesz zrobić to zwykłym batem:

for %k in (*.txt) do for /F %i in (%k) do if exist %k do ren %k %i.txt