Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. structure to file [REMAIN UNSOLVED] [CLOSED]

structure to file [REMAIN UNSOLVED] [CLOSED]

Scheduled Pinned Locked Moved C / C++ / MFC
tutorial
22 Posts 7 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Lost User

    Something like

    DWORD dwWritten;
    BOOL result = WriteFile(hFile, &st, sizeof st, &dwWritten, NULL);

    Use a similar form to read it back.

    I must get a clever new signature for 2011.

    G Offline
    G Offline
    goldenrose9
    wrote on last edited by
    #5

    #include <windows.h>
    #include <conio.h>
    #include <iostream>

    using namespace std;

    struct Detail{
    wchar_t Name[25];
    long Age;
    wchar_t Address[100];
    };

    struct Student{
    Detail detail;
    DWORD code;
    };

    int main()
    {

    DWORD BytesWritten=0, BytesRead=0;
    Student st,read;
    
    st.code =1;
    st.detail.Name = TEXT("Williams");
    st.detail.Age = 25;
    st.detail.Address = TEXT("B-33 Lane 5");
    
    
    HANDLE hFile = CreateFile(TEXT("C:\\\\demo.txt"),GENERIC\_READ | GENERIC\_WRITE,0,0,OPEN\_ALWAYS,FILE\_ATTRIBUTE\_NORMAL,0);
    if (hFile != INVALID\_HANDLE\_VALUE)
    {
    	WriteFile(hFile,&st,sizeof(Student),&BytesWritten,0);
    	ReadFile(hFile,&read,sizeof(Student),&BytesRead,0);
    	CloseHandle(hFile);
    
    	cout<<read.code<<endl;
    	cout<<read.detail.Name; 
    }
    else
    {
    	cout<<"Error! Cannot Open File";
    	exit(1);
    }
    \_getche();
    return (0);
    

    }

    when executing this code following error occurs.

    Error 1 error C2440: '=' : cannot convert from 'const wchar_t [9]' to 'wchar_t [25]'
    Error 2 error C2440: '=' : cannot convert from 'const wchar_t [12]' to 'wchar_t [100]'

    Some Day I Will Prove MySelf :: GOLD

    D A L 3 Replies Last reply
    0
    • G goldenrose9

      #include <windows.h>
      #include <conio.h>
      #include <iostream>

      using namespace std;

      struct Detail{
      wchar_t Name[25];
      long Age;
      wchar_t Address[100];
      };

      struct Student{
      Detail detail;
      DWORD code;
      };

      int main()
      {

      DWORD BytesWritten=0, BytesRead=0;
      Student st,read;
      
      st.code =1;
      st.detail.Name = TEXT("Williams");
      st.detail.Age = 25;
      st.detail.Address = TEXT("B-33 Lane 5");
      
      
      HANDLE hFile = CreateFile(TEXT("C:\\\\demo.txt"),GENERIC\_READ | GENERIC\_WRITE,0,0,OPEN\_ALWAYS,FILE\_ATTRIBUTE\_NORMAL,0);
      if (hFile != INVALID\_HANDLE\_VALUE)
      {
      	WriteFile(hFile,&st,sizeof(Student),&BytesWritten,0);
      	ReadFile(hFile,&read,sizeof(Student),&BytesRead,0);
      	CloseHandle(hFile);
      
      	cout<<read.code<<endl;
      	cout<<read.detail.Name; 
      }
      else
      {
      	cout<<"Error! Cannot Open File";
      	exit(1);
      }
      \_getche();
      return (0);
      

      }

      when executing this code following error occurs.

      Error 1 error C2440: '=' : cannot convert from 'const wchar_t [9]' to 'wchar_t [25]'
      Error 2 error C2440: '=' : cannot convert from 'const wchar_t [12]' to 'wchar_t [100]'

      Some Day I Will Prove MySelf :: GOLD

      D Offline
      D Offline
      David Crow
      wrote on last edited by
      #6

      goldenrose9 wrote:

      st.detail.Name = TEXT("Williams"); st.detail.Address = TEXT("B-33 Lane 5");

      You probably meant to use _tcscpy() here instead.

      "One man's wage rise is another man's price increase." - Harold Wilson

      "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

      "Man who follows car will be exhausted." - Confucius

      G 1 Reply Last reply
      0
      • G goldenrose9

        #include <windows.h>
        #include <conio.h>
        #include <iostream>

        using namespace std;

        struct Detail{
        wchar_t Name[25];
        long Age;
        wchar_t Address[100];
        };

        struct Student{
        Detail detail;
        DWORD code;
        };

        int main()
        {

        DWORD BytesWritten=0, BytesRead=0;
        Student st,read;
        
        st.code =1;
        st.detail.Name = TEXT("Williams");
        st.detail.Age = 25;
        st.detail.Address = TEXT("B-33 Lane 5");
        
        
        HANDLE hFile = CreateFile(TEXT("C:\\\\demo.txt"),GENERIC\_READ | GENERIC\_WRITE,0,0,OPEN\_ALWAYS,FILE\_ATTRIBUTE\_NORMAL,0);
        if (hFile != INVALID\_HANDLE\_VALUE)
        {
        	WriteFile(hFile,&st,sizeof(Student),&BytesWritten,0);
        	ReadFile(hFile,&read,sizeof(Student),&BytesRead,0);
        	CloseHandle(hFile);
        
        	cout<<read.code<<endl;
        	cout<<read.detail.Name; 
        }
        else
        {
        	cout<<"Error! Cannot Open File";
        	exit(1);
        }
        \_getche();
        return (0);
        

        }

        when executing this code following error occurs.

        Error 1 error C2440: '=' : cannot convert from 'const wchar_t [9]' to 'wchar_t [25]'
        Error 2 error C2440: '=' : cannot convert from 'const wchar_t [12]' to 'wchar_t [100]'

        Some Day I Will Prove MySelf :: GOLD

        A Offline
        A Offline
        Alain Rist
        wrote on last edited by
        #7

        Hi,

        goldenrose9 wrote:

        when executing this code following error occurs.

        When compiling is not when executing. 1 You do not correctly initialize your st structure, change to:

        Student 
        	st = {{TEXT("Williams"), 25, TEXT("B-33 Lane 5")}, 1 },
        	read = {0};	
        

        2 Your code will then compile but not to your expected result, you must set the file pointer to FILE_BEGIN before reading:

        	WriteFile(hFile,&st,sizeof(Student),&BytesWritten,0);
        	SetFilePointer(hFile, 0, 0, FILE\_BEGIN);
        	ReadFile(hFile,&read,sizeof(Student),&BytesRead,0);		
        

        cheers, AR

        When the wise (person) points at the moon the fool looks at the finger (Chinese proverb)

        1 Reply Last reply
        0
        • D David Crow

          goldenrose9 wrote:

          st.detail.Name = TEXT("Williams"); st.detail.Address = TEXT("B-33 Lane 5");

          You probably meant to use _tcscpy() here instead.

          "One man's wage rise is another man's price increase." - Harold Wilson

          "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

          "Man who follows car will be exhausted." - Confucius

          G Offline
          G Offline
          goldenrose9
          wrote on last edited by
          #8

          DavidCrow wrote:

          You probably meant to use _tcscpy() here instead.

          This works like a charm

          _tcscpy(st.detail.Name,TEXT("Williams"));
          _tcscpy(st.detail.Address,TEXT("B-33 Lane 5"));

          But another problem arises cannot set values in long and DWORD variables

          struct Detail{
          wchar_t Name[25];
          long Age;
          wchar_t Address[100];
          };

          struct Student{
          Detail detail;
          DWORD code;
          };

          Student st;
          st.code = 1;

          but st.code stores a default value of -16843010 and same problem with long data type st.Details.Age = 25 stores 65278, instead of 25. :confused: :wtf: MODIFIED: _tcscpy_s() now works. i was making a small mistake. Now it works..

          _tcscpy_s(st.detail.Name,_tcslen(st.detail.Name),TEXT("WILLIAMS"));

          Some Day I Will Prove MySelf :: GOLD

          modified on Wednesday, February 16, 2011 10:43 PM

          D S 3 Replies Last reply
          0
          • G goldenrose9

            DavidCrow wrote:

            You probably meant to use _tcscpy() here instead.

            This works like a charm

            _tcscpy(st.detail.Name,TEXT("Williams"));
            _tcscpy(st.detail.Address,TEXT("B-33 Lane 5"));

            But another problem arises cannot set values in long and DWORD variables

            struct Detail{
            wchar_t Name[25];
            long Age;
            wchar_t Address[100];
            };

            struct Student{
            Detail detail;
            DWORD code;
            };

            Student st;
            st.code = 1;

            but st.code stores a default value of -16843010 and same problem with long data type st.Details.Age = 25 stores 65278, instead of 25. :confused: :wtf: MODIFIED: _tcscpy_s() now works. i was making a small mistake. Now it works..

            _tcscpy_s(st.detail.Name,_tcslen(st.detail.Name),TEXT("WILLIAMS"));

            Some Day I Will Prove MySelf :: GOLD

            modified on Wednesday, February 16, 2011 10:43 PM

            D Offline
            D Offline
            David Crow
            wrote on last edited by
            #9

            goldenrose9 wrote:

            why error is occurring in _tcscpy_s()

            Hard to say since you did not indicate what the error was.

            "One man's wage rise is another man's price increase." - Harold Wilson

            "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

            "Man who follows car will be exhausted." - Confucius

            1 Reply Last reply
            0
            • G goldenrose9

              DavidCrow wrote:

              You probably meant to use _tcscpy() here instead.

              This works like a charm

              _tcscpy(st.detail.Name,TEXT("Williams"));
              _tcscpy(st.detail.Address,TEXT("B-33 Lane 5"));

              But another problem arises cannot set values in long and DWORD variables

              struct Detail{
              wchar_t Name[25];
              long Age;
              wchar_t Address[100];
              };

              struct Student{
              Detail detail;
              DWORD code;
              };

              Student st;
              st.code = 1;

              but st.code stores a default value of -16843010 and same problem with long data type st.Details.Age = 25 stores 65278, instead of 25. :confused: :wtf: MODIFIED: _tcscpy_s() now works. i was making a small mistake. Now it works..

              _tcscpy_s(st.detail.Name,_tcslen(st.detail.Name),TEXT("WILLIAMS"));

              Some Day I Will Prove MySelf :: GOLD

              modified on Wednesday, February 16, 2011 10:43 PM

              S Offline
              S Offline
              ShilpiP
              wrote on last edited by
              #10

              Try ZeroMemory

              Student st,read;
              ZeroMemory(&st,sizeof(st));

              I believe in LOVE AT FIRST SIGHT... Bcoz I have loved my Mother... even since I opened my eyes...(ICAN)

              N 1 Reply Last reply
              0
              • G goldenrose9

                #include <windows.h>
                #include <conio.h>
                #include <iostream>

                using namespace std;

                struct Detail{
                wchar_t Name[25];
                long Age;
                wchar_t Address[100];
                };

                struct Student{
                Detail detail;
                DWORD code;
                };

                int main()
                {

                DWORD BytesWritten=0, BytesRead=0;
                Student st,read;
                
                st.code =1;
                st.detail.Name = TEXT("Williams");
                st.detail.Age = 25;
                st.detail.Address = TEXT("B-33 Lane 5");
                
                
                HANDLE hFile = CreateFile(TEXT("C:\\\\demo.txt"),GENERIC\_READ | GENERIC\_WRITE,0,0,OPEN\_ALWAYS,FILE\_ATTRIBUTE\_NORMAL,0);
                if (hFile != INVALID\_HANDLE\_VALUE)
                {
                	WriteFile(hFile,&st,sizeof(Student),&BytesWritten,0);
                	ReadFile(hFile,&read,sizeof(Student),&BytesRead,0);
                	CloseHandle(hFile);
                
                	cout<<read.code<<endl;
                	cout<<read.detail.Name; 
                }
                else
                {
                	cout<<"Error! Cannot Open File";
                	exit(1);
                }
                \_getche();
                return (0);
                

                }

                when executing this code following error occurs.

                Error 1 error C2440: '=' : cannot convert from 'const wchar_t [9]' to 'wchar_t [25]'
                Error 2 error C2440: '=' : cannot convert from 'const wchar_t [12]' to 'wchar_t [100]'

                Some Day I Will Prove MySelf :: GOLD

                L Offline
                L Offline
                Lost User
                wrote on last edited by
                #11

                st.detail.Name = TEXT("Williams");

                You cannot copy characters in this way, you must use one of the copy methods.

                I must get a clever new signature for 2011.

                1 Reply Last reply
                0
                • S ShilpiP

                  Try ZeroMemory

                  Student st,read;
                  ZeroMemory(&st,sizeof(st));

                  I believe in LOVE AT FIRST SIGHT... Bcoz I have loved my Mother... even since I opened my eyes...(ICAN)

                  N Offline
                  N Offline
                  Niklas L
                  wrote on last edited by
                  #12

                  To OP: This is only meaningful if you don't intend to initialize every member separately.

                  home

                  1 Reply Last reply
                  0
                  • G goldenrose9

                    DavidCrow wrote:

                    You probably meant to use _tcscpy() here instead.

                    This works like a charm

                    _tcscpy(st.detail.Name,TEXT("Williams"));
                    _tcscpy(st.detail.Address,TEXT("B-33 Lane 5"));

                    But another problem arises cannot set values in long and DWORD variables

                    struct Detail{
                    wchar_t Name[25];
                    long Age;
                    wchar_t Address[100];
                    };

                    struct Student{
                    Detail detail;
                    DWORD code;
                    };

                    Student st;
                    st.code = 1;

                    but st.code stores a default value of -16843010 and same problem with long data type st.Details.Age = 25 stores 65278, instead of 25. :confused: :wtf: MODIFIED: _tcscpy_s() now works. i was making a small mistake. Now it works..

                    _tcscpy_s(st.detail.Name,_tcslen(st.detail.Name),TEXT("WILLIAMS"));

                    Some Day I Will Prove MySelf :: GOLD

                    modified on Wednesday, February 16, 2011 10:43 PM

                    D Offline
                    D Offline
                    David Crow
                    wrote on last edited by
                    #13

                    goldenrose9 wrote:

                    i was making a small mistake.

                    And you still are. _tcslen() does not tell you the size/capacity of Name, but rather how many characters it is currently holding.

                    "One man's wage rise is another man's price increase." - Harold Wilson

                    "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                    "Man who follows car will be exhausted." - Confucius

                    G 1 Reply Last reply
                    0
                    • D David Crow

                      goldenrose9 wrote:

                      i was making a small mistake.

                      And you still are. _tcslen() does not tell you the size/capacity of Name, but rather how many characters it is currently holding.

                      "One man's wage rise is another man's price increase." - Harold Wilson

                      "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                      "Man who follows car will be exhausted." - Confucius

                      G Offline
                      G Offline
                      goldenrose9
                      wrote on last edited by
                      #14

                      yes you are right. but when i use

                      _tcscpy_s(st.detail.Name,sizeof(st.detail.Name),TEXT("WILLIAMS"));

                      stack around st get corrupted. moreover when i initialize st with

                      st.code =1;
                      st.detail.Age = 25;

                      then the value is changed to

                      st.code = 4278124286
                      st.detail.Age = -16843010

                      i had intialized the st as given

                      st.code =1;
                      st.detail.Age = 25;
                      _tcscpy_s(st.detail.Name,sizeof(st.detail.Name),TEXT("WILLIAMS"));
                      _tcscpy_s(st.detail.Address,sizeof(st.detail.Address),TEXT("BB-33 LANE 5"));

                      Some Day I Will Prove MySelf :: GOLD

                      D 1 Reply Last reply
                      0
                      • G goldenrose9

                        yes you are right. but when i use

                        _tcscpy_s(st.detail.Name,sizeof(st.detail.Name),TEXT("WILLIAMS"));

                        stack around st get corrupted. moreover when i initialize st with

                        st.code =1;
                        st.detail.Age = 25;

                        then the value is changed to

                        st.code = 4278124286
                        st.detail.Age = -16843010

                        i had intialized the st as given

                        st.code =1;
                        st.detail.Age = 25;
                        _tcscpy_s(st.detail.Name,sizeof(st.detail.Name),TEXT("WILLIAMS"));
                        _tcscpy_s(st.detail.Address,sizeof(st.detail.Address),TEXT("BB-33 LANE 5"));

                        Some Day I Will Prove MySelf :: GOLD

                        D Offline
                        D Offline
                        David Crow
                        wrote on last edited by
                        #15

                        Have you considered:

                        st.code = 1;
                        st.st.Age = 25;
                        _tcscpy_s(st.st.Name, sizeof(st.st.Name), TEXT("WILLIAMS"));
                        _tcscpy_s(st.st.Address, sizeof(st.st.Address), TEXT("BB-33 LANE 5"));

                        For clarities sake, you might consider renaming the st member of Student.

                        "One man's wage rise is another man's price increase." - Harold Wilson

                        "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                        "Man who follows car will be exhausted." - Confucius

                        G 1 Reply Last reply
                        0
                        • D David Crow

                          Have you considered:

                          st.code = 1;
                          st.st.Age = 25;
                          _tcscpy_s(st.st.Name, sizeof(st.st.Name), TEXT("WILLIAMS"));
                          _tcscpy_s(st.st.Address, sizeof(st.st.Address), TEXT("BB-33 LANE 5"));

                          For clarities sake, you might consider renaming the st member of Student.

                          "One man's wage rise is another man's price increase." - Harold Wilson

                          "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                          "Man who follows car will be exhausted." - Confucius

                          G Offline
                          G Offline
                          goldenrose9
                          wrote on last edited by
                          #16

                          whenever st.code and st.st.Age is initialized with any value the result is,

                          st.code = 4278124286
                          st.detail.Age = -16843010

                          Some Day I Will Prove MySelf :: GOLD

                          D 1 Reply Last reply
                          0
                          • G goldenrose9

                            whenever st.code and st.st.Age is initialized with any value the result is,

                            st.code = 4278124286
                            st.detail.Age = -16843010

                            Some Day I Will Prove MySelf :: GOLD

                            D Offline
                            D Offline
                            David Crow
                            wrote on last edited by
                            #17

                            You need to look more closely at the code snippet I provided. You should not be assigning or referencing st.Detail. In your Student structure, Detail is a type of structure, not an instance of one.

                            "One man's wage rise is another man's price increase." - Harold Wilson

                            "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                            "Man who follows car will be exhausted." - Confucius

                            G 1 Reply Last reply
                            0
                            • D David Crow

                              You need to look more closely at the code snippet I provided. You should not be assigning or referencing st.Detail. In your Student structure, Detail is a type of structure, not an instance of one.

                              "One man's wage rise is another man's price increase." - Harold Wilson

                              "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                              "Man who follows car will be exhausted." - Confucius

                              G Offline
                              G Offline
                              goldenrose9
                              wrote on last edited by
                              #18

                              please give a small example. :confused:

                              Some Day I Will Prove MySelf :: GOLD

                              D 1 Reply Last reply
                              0
                              • G goldenrose9

                                please give a small example. :confused:

                                Some Day I Will Prove MySelf :: GOLD

                                D Offline
                                D Offline
                                David Crow
                                wrote on last edited by
                                #19

                                See here.

                                "One man's wage rise is another man's price increase." - Harold Wilson

                                "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                                "Man who follows car will be exhausted." - Confucius

                                G 1 Reply Last reply
                                0
                                • D David Crow

                                  See here.

                                  "One man's wage rise is another man's price increase." - Harold Wilson

                                  "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                                  "Man who follows car will be exhausted." - Confucius

                                  G Offline
                                  G Offline
                                  goldenrose9
                                  wrote on last edited by
                                  #20

                                  on using

                                  st.code = 1;
                                  st.st.Age = 25;
                                  _tcscpy_s(st.st.Name, sizeof(st.st.Name), TEXT("WILLIAMS"));
                                  _tcscpy_s(st.st.Address, sizeof(st.st.Address), TEXT("BB-33 LANE 5"));

                                  following error occurs.

                                  Error 1 error C2039: 'st' : is not a member of 'Student'
                                  Error 2 error C2228: left of '.Age' must have class/struct/union

                                  Some Day I Will Prove MySelf :: GOLD

                                  D 1 Reply Last reply
                                  0
                                  • G goldenrose9

                                    on using

                                    st.code = 1;
                                    st.st.Age = 25;
                                    _tcscpy_s(st.st.Name, sizeof(st.st.Name), TEXT("WILLIAMS"));
                                    _tcscpy_s(st.st.Address, sizeof(st.st.Address), TEXT("BB-33 LANE 5"));

                                    following error occurs.

                                    Error 1 error C2039: 'st' : is not a member of 'Student'
                                    Error 2 error C2228: left of '.Age' must have class/struct/union

                                    Some Day I Will Prove MySelf :: GOLD

                                    D Offline
                                    D Offline
                                    David Crow
                                    wrote on last edited by
                                    #21

                                    I just compiled your code with my changes. It compiled and ran fine.

                                    "One man's wage rise is another man's price increase." - Harold Wilson

                                    "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                                    "Man who follows car will be exhausted." - Confucius

                                    G 1 Reply Last reply
                                    0
                                    • D David Crow

                                      I just compiled your code with my changes. It compiled and ran fine.

                                      "One man's wage rise is another man's price increase." - Harold Wilson

                                      "Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons

                                      "Man who follows car will be exhausted." - Confucius

                                      G Offline
                                      G Offline
                                      goldenrose9
                                      wrote on last edited by
                                      #22

                                      please give a sample so that i can understand my mistake.

                                      Some Day I Will Prove MySelf :: GOLD

                                      1 Reply Last reply
                                      0
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes


                                      • Login

                                      • Don't have an account? Register

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • World
                                      • Users
                                      • Groups