Ecco qui il codice:
in un header ReadTextFromFile.h
Questa è la struttura in cui verranno memorizzate le informazioni di un filecodice://ReadTextFromFile.h #include <stdio.h> #include <cstdio> #include <Windows.h> #include <string.h> #include <tchar.h> typedef unsigned long long INT64BIT; typedef struct _s_FileInfo { BOOL bFileExisting_ ; //out se TRUE il file esiste e viceversa TCHAR * szTextInFile ; //out contenuto del file TCHAR * szFilePath ; //in Path del file TCHAR * szFileName ; //out Nome del file senza la path TCHAR * szFileExtension ; //out Estensione del file TCHAR * szOpenMode ; //in Da settare sempre "r", "r+" o "r+b" INT64BIT i64bFileSize ; //Grandezza del file }s_FileInfo ; DWORD GetTextFromFile(s_FileInfo * s_FI);
ed ecco invece il codice che riempe la struttura: tengo a sottolineare che non mi da errore di runtime sempre ma solo quando il processo è terminato in modo anomalo, penso che comunque abbia scritto il codice in modo poco portabile.....
Dove scrivo //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< penso che ci sia un errore
codice:#include "stdafx.h" #include <stdio.h> #include <cstdio> #include <Windows.h> #include <string.h> #include <tchar.h> #include "ReadTextFromFile.h" #if !READ_TEXT_FROM_FILE_H #define READ_TEXT_FROM_FILE_H 1 #define GTFF_SUCCESSED 0 #define GTFF_CANNOT_OPEN_FILE 1 #define GTFF_THE_FILE_DOESNT_EXIST 2 #define GTFF_CANNOT_READ_THE_FILE 3 #define DELETE_STRING ; /* \ {\ {\ s_FI->szFilePath = new TCHAR [1];\ s_FI->szFileName = new TCHAR [1];\ s_FI->szFileExtension = new TCHAR [1];\ szTextInFileBuffer = new TCHAR [1];\ szFgetsBuffer = new TCHAR [1];\ delete [] s_FI->szFilePath;\ delete [] s_FI->szFileName;\ delete [] s_FI->szFileExtension;\ delete [] szTextInFileBuffer\ delete [] szFgetsBuffer;\ }\ }*/ //qui è da modificare....se tolgo il commento e lo metto come macromi da problemi..... //contando che in un exe questa funzione può essere utilizzata più volte...sono un po confusionato!!! //<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< DWORD GetTextFromFile(s_FileInfo * s_FI) { static BOOL bAlreadyCalled_ = FALSE; bAlreadyCalled_ = TRUE; TCHAR ** szFileName = &(s_FI->szFilePath); //Check if the file is existing WIN32_FIND_DATA wfd; //WBox(s_FI->szFilePath); HANDLE hFind = FindFirstFile( s_FI->szFilePath, &wfd ); if (hFind == INVALID_HANDLE_VALUE) { s_FI->bFileExisting_ = FALSE; MessageBox(NULL,_T("The file doesn't exist"),_T("Fatal Error"),MB_ICONERROR); DELETE_STRING return GTFF_THE_FILE_DOESNT_EXIST; } s_FI->bFileExisting_ = TRUE; #define GTFF_SIZE_OF_FILE (wfd.nFileSizeHigh * (MAXDWORD+1) + wfd.nFileSizeLow) s_FI->i64bFileSize = GTFF_SIZE_OF_FILE; //Open the file FILE * FFileToOpen; FFileToOpen = fopen(s_FI->szFilePath,s_FI->szOpenMode); if(FFileToOpen == NULL) { MessageBox(NULL,_T("Cannot open the file"),_T("Fatal Error"),MB_ICONERROR); DELETE_STRING return GTFF_CANNOT_OPEN_FILE; } //Read text form file TCHAR * szFgetsBuffer; szFgetsBuffer = new TCHAR [GTFF_SIZE_OF_FILE / sizeof(TCHAR)]; TCHAR * szTextInFileBuffer; szTextInFileBuffer = new TCHAR [GTFF_SIZE_OF_FILE / sizeof(TCHAR)]; szTextInFileBuffer[0] = _T('\0'); for(int i = 0; i < 1;) { if(fgets(szFgetsBuffer,GTFF_SIZE_OF_FILE,FFileToOpen) == NULL) break; _tcscat(szTextInFileBuffer,szFgetsBuffer); } /* int iResult = fread(szScanfBuffer, sizeof(TCHAR), GTFF_SIZE_OF_FILE, FFileToOpen); if( (iResult > GTFF_SIZE_OF_FILE /sizeof(TCHAR) && iResult != 0) || (iResult > GTFF_SIZE_OF_FILE /sizeof(TCHAR) && iResult < GTFF_SIZE_OF_FILE /sizeof(TCHAR)) ) MessageBox(NULL,"The file may be not corrispondent to the selected","Warning",MB_ICONWARNING); if(iResult < 0 ) { MessageBox(NULL,"Cannot read the file","Fatal error",MB_ICONERROR); return GTFF_CANNOT_READ_THE_FILE; } */ //Set file name into the structure s_FI->szFileName = new TCHAR [_tcslen(s_FI->szFilePath) + 1]; for(int i = 0, j = 0; i < _tcslen(s_FI->szFilePath) + 1; i++) { if(s_FI->szFilePath[i] == _T('\0')) { s_FI->szFileName [j] = s_FI->szFilePath[i]; } if(s_FI->szFilePath[i] == _T('\\')) { j = 0; s_FI->szFileName[0] = _T('\0'); } else if(s_FI->szFilePath[i] != _T('\\')) { s_FI->szFileName [j] = s_FI->szFilePath[i]; j++; } } //Set file extension into the structure s_FI->szFileExtension = new TCHAR [_tcslen(s_FI->szFilePath) + 1]; for(int i = 0, j = 0; i < _tcslen(s_FI->szFilePath) + 1; i++) { if(s_FI->szFilePath[i] == _T('\0')) { s_FI->szFileExtension [j] = s_FI->szFilePath[i]; } if(s_FI->szFilePath[i] == _T('.')) { j = 0; s_FI->szFileExtension[0] = _T('\0'); } else if(s_FI->szFilePath[i] != '.') { s_FI->szFileExtension [j] = s_FI->szFilePath[i]; j++; } } if(_tcscmp(s_FI->szFileExtension,s_FI->szFilePath) == 0) s_FI->szFileExtension [0] = _T('\0'); s_FI->szTextInFile = new TCHAR [_tcslen(szTextInFileBuffer) + 1]; _tcscpy(s_FI->szTextInFile,szTextInFileBuffer); fclose(FFileToOpen); DELETE_STRING return GTFF_SUCCESSED; } #endif //READ_TEXT_FROM_FILE_H
il codice è facilmente leggibile......help me![]()
![]()
![]()
![]()


Rispondi quotando