I want to rename file with name of ip address like (192.168.1.55.txt)
In xyz.txt file have ip address.
I m finding this ip address but rename giving problem???

#include <stdio.h>
#include<conio.h>

int main ()
{
      int result;
      char ipadd[20];
      FILE *pFile;;
           pFile = fopen ("xyz.txt" , "r");
           fseek(pFile,172,SEEK_SET); 
           fgets (ipadd , 16 , pFile);
                   
           printf("Before Rename");
           printf("%s",ipadd);         // it gives ip address in xyz.txt
           char oldname[] ="xyz.txt";
                 
      result= rename( oldname , ipadd ); //problem is here
      if ( result == 0 )
      puts ( "File successfully renamed" );
      else
      perror( "Error renaming file" );
      fclose (pFile);
   getch();
}

This gives OutPut:->
Before Rename 192.168.1.55
Error renaming file: Permission denied


How to solve this problem ??

#include <stdio.h>
#include<conio.h>
int main ()
{
int result;
char ipadd[20];
FILE *pFile;;
pFile = fopen ("xyz.txt" , "r");
fseek(pFile,172,SEEK_SET);
fgets (ipadd , 16 , pFile);
fclose (pFile);
printf("Before Rename");
printf("%s",ipadd); // it gives ip address in xyz.txt
char oldname[] ="xyz.txt";
result= rename( oldname , ipadd ); //problem is here
if ( result == 0 )
puts ( "File successfully renamed" );
else
perror( "Error renaming file" );
getch();
}

OutPut:-
Before Rename 192.168.1.55
Error renaming file: Invalid Argument

I m using Windows Xp.
There is a IP address in xyz file so i want to rename xyz file with that ip address....

fgets() add the '\n' to the end of the string if it exists in the file. So you need to strip it off before calling rename().

fgets (ipadd , 16 , pFile);
if( ipadd[strlen(ipadd)-1] == '\n')
    ipadd[strlen(ipadd)-1] = 0;

fseek is causing the problem.

Make sure to return a value from main.
Also, learn how to use code tags - the yellow background behind your code.

Edit - fseek is probably causing the problem. Your code works fine if you create a new text file
and comment it out.

Windows IP Configuration


Ethernet adapter Local Area Connection:

Connection-specific DNS Suffix . :

IP Address. . . . . . . . . . . . : 192.168.1.55

Subnet Mask . . . . . . . . . . . : 255.255.255.0

Default Gateway . . . . . . . . . : 192.168.1.1
Active Connections

Proto Local Address Foreign Address State
TCP 0.0.0.0:80 0.0.0.0:0 LISTENING
TCP 0.0.0.0:135 0.0.0.0:0 LISTENING
TCP 0.0.0.0:443 0.0.0.0:0 LISTENING
TCP 0.0.0.0:445 0.0.0.0:0 LISTENING
TCP 0.0.0.0:990 0.0.0.0:0 LISTENING
TCP 0.0.0.0:2869 0.0.0.0:0 LISTENING
TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING
TCP 0.0.0.0:3389 0.0.0.0:0 LISTENING
TCP 0.0.0.0:8888 0.0.0.0:0 LISTENING
TCP 127.0.0.1:1029 0.0.0.0:0 LISTENING
TCP 127.0.0.1:1039 127.0.0.1:1040 ESTABLISHED
TCP 127.0.0.1:1040 127.0.0.1:1039 ESTABLISHED
TCP 127.0.0.1:1041 127.0.0.1:1042 ESTABLISHED
TCP 127.0.0.1:1042 127.0.0.1:1041 ESTABLISHED
TCP 127.0.0.1:5679 0.0.0.0:0 LISTENING
TCP 127.0.0.1:7438 0.0.0.0:0 LISTENING
TCP 192.168.0.45:139 0.0.0.0:0 LISTENING
UDP 0.0.0.0:445 *
UDP 0.0.0.0:500 *
UDP 0.0.0.0:1043 *
UDP 0.0.0.0:1229 *
UDP 0.0.0.0:1344 *
UDP 0.0.0.0:1816 *
UDP 0.0.0.0:4500 *
UDP 0.0.0.0:8000 *
UDP 127.0.0.1:123 *
UDP 127.0.0.1:1297 *
UDP 127.0.0.1:1900 *
UDP 192.168.0.45:123 *
UDP 192.168.0.45:137 *
UDP 192.168.0.45:138 *
UDP 192.168.0.45:1900 *

This is my xyz.txt

fseek is causing the problem..

Yes, that is the major problem.
Here is the entire line that he is trying to read Before Renamesk . . . . . . . . . . . : 255.255.255.0

#include<conio.h>
#include <stdio.h>
#include "winsock2.h"
#include<iostream>
#include<fstream>

using namespace std;
void Myfun(string);
void Myfun(string a)
{
       int i,result;
       printf("\n In function");
       cout<<a;
       char oldname[] ="c:\\xyz.txt";
       char mychar[a.size()+1];
       std::strcpy(mychar, a.c_str());
     
      for(i=0;i<a.size()+1;i++)
     {
      printf("\n%c",mychar[i]);                     
     }
     
      result = rename(oldname,mychar);
      if ( result == 0 )
      puts ( "File successfully renamed" );
      else
      perror( "Error renaming file" );
      
}
  
int main ()
{
      int result,size;
      char firstipadd[20];
      string str,aaa;
      FILE *pFile;;
           pFile = fopen ("c:\\xyz.txt" , "r");
           fseek(pFile,172,SEEK_SET);
           fgets (firstipadd , 16 , pFile);
            rewind (pFile);
                      
    int p = fclose (pFile);
    if( p ==0)
    {
        printf("\nFile closed");
    }

                 
            for(int i = 0; firstipadd[i]!='\0'; i++)
          {
            str+= firstipadd[i];
            
          }
           cout<<"\n"<<str;
         
         Myfun(str);
        getch();
}

Here I m got ip address from xyz.txt
rewind it and successfully close it and transfer to function ... but when rename it .... it gives invalid Argument error ....
can string not correctly convert to char array??

#include <stdio.h>
#include<string.h>
int main ()
{
      char firstipadd[20], fname[30] = "D:\\";
      FILE *pFile;;
      pFile = fopen ("D:\\xyz.txt" , "r");
      fseek(pFile,169,SEEK_SET);
      fgets (firstipadd , 14 , pFile);
      fclose (pFile);
      strcat ( fname, firstipadd) ;
      rename ( "D:\\xyz.txt", fname ) ;
      getchar ( ) ;
}

This code is working for me for your txt file.
However, I dont like the idea of using fseek like this.
I would prefer reading the file char by char.
But since you are in a hurry, I'll give this for now.

#include <stdio.h>
#include<string.h>
#include<conio.h>
using namespace std;

int main ()
{
char firstipadd[20], fname[30] = "C:\\" ;
int result;
FILE *pFile;;
char *aaa;
pFile = fopen ("C:\\xyz.txt" , "r");

fseek(pFile,172,SEEK_SET);
fgets (firstipadd , 15 , pFile);
printf("\n%s",firstipadd);
fclose (pFile);
printf("%s",fname);

strcat ( fname,"\\") ;
strcat ( fname, firstipadd);
printf("\n%s",fname);

result=rename ( "C:\\xyz.txt",fname ) ;
if ( result == 0 )
puts ( "File successfully renamed" );
else
perror( "Error renaming file" );

getch();

}

Giving error:->

192.168.1.55
C:\
C:\\192.168.1.55
Error renaming file: Invalid argument

Hey and also u are reading \n along with the IP address, It is evident in the output
12 will do I guess

This article has been dead for over six months. Start a new discussion instead.