//-------------------------------------------------------------------
//-- Write File C++ sample - Copyright © 2006, Dave Moats
//--
//-- This sample is provided 'as-is', without any express or implied warranty.
//-- In no event will the authors be held liable for any damages arising from
//-- the use of this sample code.
//--
//-- Permission is granted to anyone to use this sample code for any purpose,
//-- including commercial applications, subject to the following restrictions:
//--
//-- The origin of this code must not be misrepresented;
//--       you must not claim that you wrote the original code.
//--       If you use this code, an acknowledgment in the
//--       documentation is requested - shown below:
//--
//-- Portions Copyright © 2006, Dave Moats (http://www.davemoats.com/).
//--
//-------------------------------------------------------------------

//-------------------------------------------------------------------
//-- To use this sample, you must include the following header
//-------------------------------------------------------------------
#include <windows.h>

//-------------------------------------------------------------------
//-- Function:       writeToFile
//-- Arguments:    char *filePath - path to the file to write to
//--                      char *pszData - data to write to the file
//--                      bool bAppend - flag to specifying if the file should
//--                                           have the date appended to it ( true) or
//--                                           ( false) create a new file
//-- Returns:       unsigned long - 0 for success or the Win32 error code
//-- Description: Takes the data in pszData and writes it to the file
//--                      pointed to by filePath.    If the append flag ( bAppend)
//--                      is set to true then the data is appended to the end of
//--                      the file, otherwise a new file is created and the data
//--                      is written to that file.
//-------------------------------------------------------------------
unsigned long writeToFile ( char *filePath, char *pszData, bool bAppend )
{
   // set our two variables one for the flags used when
   // opening the file, the other to store our error code
   unsigned long ulCreateFlags = CREATE_ALWAYS;
   unsigned long ulError = NO_ERROR;

   // if we are appending change the flag to OPEN_ALWAYS
   // this will open an existing file if it exists or
   // create a new file if it does not exist
   if ( bAppend )
         ulCreateFlags = OPEN_ALWAYS;

   // Open the file to write to......using CreateFileA to
   // force the use of the ANSI version of this function
   HANDLE hFile = CreateFileA ( filePath,
                                             GENERIC_WRITE,
                                             0,
                                             NULL,
                                             ulCreateFlags,
                                             FILE_ATTRIBUTE_NORMAL,
                                             NULL );

   // check to see if the file was opened properly
   if ( hFile != INVALID_HANDLE_VALUE )
   {
         // get the size of the data to write to this file
         unsigned long ulLen = ( strlen ( pszData ) );

         // check to see if we are appending to the file
         if ( bAppend )
         {
               // since we are appending to the file, move the file pointer
               // to the end of the file
               unsigned long ulPos = SetFilePointer ( hFile,
                                                                        0,
                                                                        NULL,
                                                                        FILE_END) ;

               // make sure the file pointer move was successful
               if ( GetLastError ( ) == NO_ERROR )
               {
                     // since we were unable to set the
                     // file pointer, get the error code.
                     ulError = GetLastError ( );
                    
                     // close the file handle
                     CloseHandle ( hFile );
                    
                     // return the error condition
                     return ulError;
               }

         }

         // now try to write to the file
         if ( !WriteFile ( hFile,
                                 pszData,
                                 ulLen,
                                 &ulBytes,
                                 NULL ))
         {
               // no data written
               ulError = GetLastError ( );
         }

         // close the file handle
         CloseHandle ( hFile );
   }
   else
   {
         // couldn't open the file
         ulError = GetLastError ( );
   }
  
   return ulError;
}


Copyright © 2005 - 2013 Dave Moats.  All rights reserved.  Links: Copyright © by their respective owners.
NO WARRANTIES EXTENDED.  Void where prohibited by law.  Please report any issues or broken links.
You may link to this site freely from your own site.  You may quote from this site, but please include a link to the original source on the originating site.