Its seem so complex to programming under MS Windows

On Wed, Jun 24, 2009 at 9:27 AM, hari_poddar2009<[email protected]> wrote:
>
>
> --- In [email protected], Thomas Hruska <thru...@...> wrote:
>>
>> hari_poddar2009 wrote:
>> > --- In [email protected], Thomas Hruska <thruska@> wrote:
>> >> hari_poddar2009 wrote:
>> >>> i need to write a program that checks for the existence of a file in
>> >>> the application data folder referred by the environment variable 
>> >>> %APPDATA%.
>> >>> If it does not exist the file will be created, written to, compressed and
>> >>> closed. if it exists then the file will be opened using LZOPenFile(). The
>> >>> end of file will be sought and the file will be written to. Then the file
>> >>> will be closed with LZClose(). My code is listed below:
>> >>>
>> >> <snip>
>> >>> i am using the lcc win32 compiler and am getting the error message:
>> >>> "undefined reference to _lzopenf...@12" in the line which calls
>> >>> INT result=LZOpenFile(name2ptr,openPtr,OF_READWRITE);
>> >>> please help!
>> >> This is a linker issue. You probably need to add 'lz32.lib' to the
>> >> linker dependency/library options.
>> >>
>> >
>> > i created a new project and added the source file with my code to it.
>> > i also mentioned 'lz32.lib' in the linker settings dialog box. i rebuilt
>> > the make file as prompted and then compiled the project. i still got the
>> > same error i mentioned in my previous post!
>>
>> You mentioned that you are using lcc win32, which I'm not familiar with.
>> This is a linker error you will have to figure out. Alternatively,
>> you could try using LoadLibrary()/GetProcAddress().
>>
>> --
>> Thomas Hruska
>> CubicleSoft President
>> Ph: 517-803-4197
>>
>> *NEW* MyTaskFocus 1.1
>> Get on task. Stay on task.
>>
>> http://www.CubicleSoft.com/MyTaskFocus/
>>
>
> yes i have been able to solve the problem in part by using LoadLibrary() and
> GetProcAddress(). i have been able to decompress the file (after it has been
> created and compressed) using LZOpenFile().
>
> Now i want to append data to it. i used WriteFile() but the file's previous
> data is getting overwritten. How do i make sure that the new data is
> appended and not overwritten on previous data. Could u tell me if 'zlib'
> library is of any use here? here's my latest code:
>
> #include <stdio.h>
> #include <windows.h>
> #include <winioctl.h>
> #include <conio.h>
>
> typedef INT (*openFunc)(LPTSTR name,LPOFSTRUCT reOpen,WORD style);
> openFunc myOpening;
>
> extern LONG APIENTRY LZSeek(INT hFile,LONG offset,INT mode);
> extern VOID APIENTRY LZClose(INT hFile);
>
> void main(void)
> {
>
> CHAR filename[256],dirname[256],dllName[15],allUsers[512];
> char inputData[256];
> char *inputPtr;
> inputPtr=&(inputData[0]);
> HANDLE file;
> OFSTRUCT open;
> LPOFSTRUCT openPtr=&(open);
> LPCSTR
> namePtr=&(filename[0]),dirPtr=&(dirname[0]),dllPtr=&(dllName[0]),userPtr=&(allUsers[0]);
> LPTSTR name2ptr;
> DWORD
> desAccess=GENERIC_READ|GENERIC_WRITE,share=FILE_SHARE_WRITE|FILE_SHARE_READ,creationMode=OPEN_ALWAYS,error;
> DWORD envVar=0,flags=FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_SYSTEM;
>
> LPCSTR envName="ALLUSERSPROFILE";
>
> envVar=GetEnvironmentVariable(envName,userPtr,512);
> if(envVar<=512){
> CHAR *str="\\temp.dat";
> namePtr=strcat(userPtr,str);
> name2ptr=(LPTSTR)&(allUsers[0]);
> printf("%s\n",namePtr);
> printf("%s\n",name2ptr);
> dllPtr="lz32.dll";
>
> file=CreateFile(namePtr,desAccess,share,NULL,creationMode,flags,NULL);
> error=GetLastError();
> DWORD writeBytes=0;
> LPDWORD bytesWritten=&(writeBytes);
> HMODULE mod=LoadLibrary(dllPtr);
> myOpening=(openFunc)GetProcAddress(mod,"LZOpenFileA");
> if(mod!=NULL){
> if(file!=INVALID_HANDLE_VALUE)
> {
> printf("Opening file.Checking status..\n");
>
> if(error==0)/*file created*/
> {
> inputPtr="This is a very long line in a very large file that has to be
> compressed!\n";
> printf("File created. Writing....\n");
> if(WriteFile(file,inputPtr,strlen(inputPtr),bytesWritten,NULL)){
> printf("Data written!\n");
> DWORD ioCode=FSCTL_SET_COMPRESSION;
> DWORD bytes=0;
> LPDWORD bytesRet=&(bytes);
> USHORT format[1];
> LPVOID inBuffer=&(format[0]);
> format[0]=COMPRESSION_FORMAT_DEFAULT;
> if(DeviceIoControl(file,ioCode,inBuffer,2,NULL,0,bytesRet,NULL)){
> CloseHandle(file);
> printf("File compressed!\n");
> }
> }
>
> }
> else if(error==183){/*file exists*/
> printf("File exists.\n");
> inputPtr="This is the next long line in a very large file is already
>
> compressed!\n";
> if(myOpening!=NULL){
>
> INT result=(myOpening)(name2ptr,openPtr,OF_READWRITE);
> printf("result = %d\n",result);
> if(result!=-1 && result!=-5)
> {
> printf("Opened compressed file..\n");
> BOOL success;
> LONG pos=0;
> /*LARGE_INTEGER largeStruct;
> PLARGE_INTEGER fileSize=&(largeStruct);
> success=GetFileSizeEx(file,fileSize);
>
> if(success){*/
> printf("Seeking EOF..\n");
> pos=LZSeek(result,(LONG)0,(INT)2);
> printf("End pos: %ld\n",pos);
> printf("Writing to file....\n");
>
>
> WriteFile(file,inputPtr,strlen(inputPtr),bytesWritten,NULL);
> CloseHandle(file);
> printf("Finished writing!\n");
>
>
> LZClose(result);
> }
> else
> {
> printf("File error code: %d\n",GetLastError());
> }
> }
> else
> {
> printf("LZOpenFile could not be invoked! ");
> printf("%d\n",GetLastError());
> }
>
> }
> printf("File closed...");
>
> }
> else
> printf("No file!");
> FreeLibrary(mod);
> }
> }
> getch();
> }
>
> 

Reply via email to