Toon posts:

[c++] File naam veranderen

Pagina: 1
Acties:
  • 38 views sinds 30-01-2008

Verwijderd

Topicstarter
Heey,


Ik ben bezig met een programma wat bestanden zoals log files kan inkorten. De output die ik nu krijg doormiddel van dit stukje tekst:


CString strNewFile;
strNewFile.Format("%s.%u", m_strFileName, uiFileCount);
if (!outputfile.Open(strNewFile, CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite|CFile::typeBinary)) { ASSERT(FALSE);
return;
}


output: Bestanden die bijvoorbeeld 'Comm222.log.13' heten. Ik kan deze bestanden niet meer openen. Hoe krijg ik dit naar Comm222_13.log???
Alvast bedankt,


gr md

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

• zet code tussen [rml][ code=c++]...[ /code][/rml] tags
• wat is het probleem nou eigenlijk? Je kunt de files niet meer wijzigen, gewoon met windows explorer bedoel je? En waarom is het dan een programmeerprobleem?


Of is de code van die app niet van jou en wil jij het aangepast hebben, terwijl je eigenlijk geen verstand hebt van C++?

[ Voor 3% gewijzigd door .oisyn op 30-08-2004 16:46 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Verwijderd

Topicstarter
Het zit zo ik heb een log file van 14 mb en daar wil ik kleinere log files van maken. Dat doet mijn programma. Van Comm222.log maar hij verschillende log files die hij Comm222.log.0 t/m Comm222.log.20 ofzo noemt, maar Comm222.log.20 kan je niet openen met notepad ofzo, dus.. moet ik het programma zo veranderen dat hij deze fils Comm222_1.log noemt.. Ik begin net pas met c++ dus ik kan het een beetje vaag uitleggen.. sorry daarvoor..

Verwijderd

Met de MFC libraries heb ik ook problemen bij bestanden, je kan beter NATIVE ANSI C ++ gebruiken..


Zoals:


FILE* f=fopen("filenaam","r");
if( f!=NULL )
{
fread(....)
fwrite(....)
fclose(f);
}


Die standaard MFC libraries kunnen onverwacht dialogen beginnen met de gebruiker bijvoorbeeld bij een systeem bestand of een directory die niet bestaat, ipv dat je zelf de gebruiker bericht beginnen die MFC libraries zelf dingen met de gebruiker te overleggen...


Die MFC libraries geven problemen bij porting, ik gebruik zelfs geen CString meer, doe alles op de geheugenzuinige manier...


Zoals:


char szFiletitle[]="title.txt";
char szFilename[MAX_PATH];
memset(szFilename,0, sizeof(char)*MAXPATH);// ja ik weet het, dat geheugen management van windows geeft je gewoon gebruikt geheugen af en toe, dat nog niet op 0 is gezet,....
strcpy(szFilename,"d:\\dir\\");
strcat(szFilename,szFiletitle);


of


sprintf(szFilename,"d:\\dir\\%s", szFiletitle);


...


Edit:


BOOL VerkrijgNieuweBestandsNaam(LPCSTR origineelLogBestand, int indexNieuweBestand, LPSTR szResultaat)
{
char ast[MAXPATH]={0};


for(int i=0; i< strlen(origineelLogBestand); i++)
{
// vervang de . in de origele log bestand door _ zodat je later een extensie toe kan voegen///
if( originieelLogBestand[i]=='.' )
ast[i]='_';
else
ast[i]=originieeelLogBestand[i];


// een bestand als d:\\test.log word dan d:\\test_log


}


nu nog de index omzetten in string
char szNum[4]={0};
_itoa(index,szNum,10);
strcat(ast,"_");
strcat(ast,szNum);
strcat(ast,".txt");
// een bestand als d:\\test_log word dan d:\\test_log_24.txt als je als index 24 geeft...
// resultaat terug zetten
strcpy(szResultaat, ast);
return TRUE;
}


(gauw een schetsje zonder checken op spellings fouten maar het gaat om het idee)


}
char ast[MAX_PATH];

[ Voor 33% gewijzigd door Verwijderd op 30-08-2004 17:06 ]


  • Griffin
  • Registratie: Maart 2003
  • Laatst online: 21-05 12:02

Griffin

Is mythical

Verwijderd schreef op 30 augustus 2004 @ 16:53:
Ik begin net pas met c++ dus ik kan het een beetje vaag uitleggen.. sorry daarvoor..
Zoals ik het nu snap kan ik miss het beter uit leggen:


[verduidelijking]
De TS heeft nu 1 log bestand van 14MB.
Hij wil dit log bestand verdelen in kleinere stukjes.
Hiervoor gebruikt hij een programma dat dit doet.


Het originele bestand heet: Comm222.log
Als het programma klaar is met verkleinen dan komt er dit bestand uit:
Comm222.log.20 (de 20 is een voorbeeld)


Nu is het probleem dat 'Notepad' dat bestand niet kan openen.


Nu is zijn vraag of er een mogelijkheid is dat het programma niet;
"Comm222.log.20" dit als bestandsnaam geeft
MAAR
"Comm222_20.log" maar zoiets.
[/verduidelijking]


Ik hoop dat ik het wat duidelijker heb neer gezet.


offtopic:
Eey Kai jij ook weer op GOT :P



PS: Voortaan enters gebruiken. dan word het al wat duidelijker.

[ Voor 5% gewijzigd door Griffin op 30-08-2004 17:04 ]


Verwijderd

Griffin schreef op 30 augustus 2004 @ 17:03:
[...]


Zoals ik het nu snap kan ik miss het beter uit leggen:


[verduidelijking]
De TS heeft nu 1 log bestand van 14MB.
Hij wil dit log bestand verdelen in kleinere stukjes.
Hiervoor gebruikt hij een programma dat dit doet.


Het originele bestand heet: Comm222.log
Als het programma klaar is met verkleinen dan komt er dit bestand uit:
Comm222.log.20 (de 20 is een voorbeeld)


Nu is het probleem dat 'Notepad' dat bestand niet kan openen.


Nu is zijn vraag of er een mogelijkheid is dat het programma niet;
"Comm222.log.20" dit als bestandsnaam geeft
MAAR
"Comm222_20.log" maar zoiets.
[/verduidelijking]


Ik hoop dat ik het wat duidelijker heb neer gezet.


offtopic:
Eey Kai jij ook weer op GOT :P



PS: Voortaan enters gebruiken. dan word het al wat duidelijker.
Het is me duidelijk, notepad weigert gewoon bepaalde extensies, je moet dus vgewoon een functie hebben die een goeie voor notepad begrijpelijke naam maakt als jij het nummer van de logfile geeft geeft onderstaande functieschets wat je wilt ?


BOOL VerkrijgNieuweBestandsNaam(LPCSTR origineelLogBestand, int indexNieuweBestand, LPSTR szResultaat)
{
char ast[MAXPATH]={0};


for(int i=0; i< strlen(origineelLogBestand); i++)
{
// vervang de . in de origele log bestand door _ zodat je later een extensie toe kan voegen///
if( originieelLogBestand[i]=='.' )
ast[i]='_';
else
ast[i]=originieeelLogBestand[i];


// een bestand als d:\\test.log word dan d:\\test_log


}


nu nog de index omzetten in string
char szNum[4]={0};
_itoa(index,szNum,10);
strcat(ast,"_");
strcat(ast,szNum);
strcat(ast,".txt");
// een bestand als d:\\test_log word dan d:\\test_log_24.txt als je als index 24 geeft...
// resultaat terug zetten
strcpy(szResultaat, ast);
return TRUE;
}


(gauw een schetsje zonder checken op spellings fouten maar het gaat om het idee)


}

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-05 23:07

.oisyn

Moderator Devschuur®

Demotivational Speaker

Verwijderd schreef op 30 augustus 2004 @ 16:53:
dus.. moet ik het programma zo veranderen dat hij deze fils Comm222_1.log noemt.. Ik begin net pas met c++ dus ik kan het een beetje vaag uitleggen.. sorry daarvoor..
Ok, met andere woorden: van de code die je al hebt gepost in je topicstart snap je niet zoveel en je hebt geen idee wat je moet doen om de files een Comm222_x.log formaat te geven ipv Comm222.log.x


Nou kan ik dat wel uit gaan leggen maar dat heeft weinig nut. Dit soort topics zijn hier eigenlijk niet toegestaan, simpelweg omdat GoT geen quick fix is voor je problemen. Programming & Webscripting is bedoeld voor programmeerproblemen, jouw probleem is echter dat je nog niet zo goed kan programmeren. Dat is niet erg, maar dan is GoT wellicht niet het juiste forum voor je.


Ik zou eens uit gaan zoeken wat de statement
C++:
1
strNewFile.Format("%s.%u", m_strFileName, uiFileCount);

precies doet. Open de documentatie en zoek naar de CString class, en ga kijken waar de Format functie voor is. Je zal zien dat je daarna al begrijpt hoe je het aan kunt passen.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.