Anime-Otaku
Erfahrenes Mitglied
hallo,
ich habe nun seit ein paar Wochen mit dem Programmieren angefangen und bin immer noch ein wenig isch. Ich hab schon viel rum gegoogled und auch bei euch schon gesucht. Aber irgendwie steig ich da nicht richtig durch.
Ich weiß zwar, dass sich die Funktion selbst wieder aufrufen soll, aber wie man das hinkriegt ...kein Plan.
Nun zum Programm. Ich will ein Programm schreiben, dass mir ein Verzeichnis mit unter Verzeichnisen rekursiv durchsucht und alle Dateien die nach nem bestimmten Filter z.B. *.txt löscht. Das Program soll hauptsächlich in c# geschrieben werden (weils schneller sein soll). Geschrieben wird im Programm Visual c++ 7 (.net 2003), jedoch bitte keine .net elemente verwenden.danke.
Bei meinem momentanen Programm löscht er natürlich nur die Dateien im selbigen Verzeichnis.
usage over command shell (cmd):
logclean.exe <dir> <filteroption>
logclean.exe - the program^^
<dir> - the direct directory which files should be checked for deleting; e.g. c:\path\to\dir\
<filteroption> - which files should be deleted, e.g. *.*(deletes all files) or fu*ba.txt
*/
Ich hoffe ihr könnt mir helfen. Vielen Dank schonmal.
P.S.: Dies ist mein 1. post in nem programmiererforum
ich habe nun seit ein paar Wochen mit dem Programmieren angefangen und bin immer noch ein wenig isch. Ich hab schon viel rum gegoogled und auch bei euch schon gesucht. Aber irgendwie steig ich da nicht richtig durch.
Ich weiß zwar, dass sich die Funktion selbst wieder aufrufen soll, aber wie man das hinkriegt ...kein Plan.
Nun zum Programm. Ich will ein Programm schreiben, dass mir ein Verzeichnis mit unter Verzeichnisen rekursiv durchsucht und alle Dateien die nach nem bestimmten Filter z.B. *.txt löscht. Das Program soll hauptsächlich in c# geschrieben werden (weils schneller sein soll). Geschrieben wird im Programm Visual c++ 7 (.net 2003), jedoch bitte keine .net elemente verwenden.danke.
Bei meinem momentanen Programm löscht er natürlich nur die Dateien im selbigen Verzeichnis.
usage over command shell (cmd):
logclean.exe <dir> <filteroption>
logclean.exe - the program^^
<dir> - the direct directory which files should be checked for deleting; e.g. c:\path\to\dir\
<filteroption> - which files should be deleted, e.g. *.*(deletes all files) or fu*ba.txt
*/
Code:
#include <list>
#include <stdio.h>
#include <stdlib.h>
#include <io.h>
#include <string>
using namespace std;
FILE *instream=0;
FILE *outstream=0;
const unsigned char g_dirtmpbuf=255;
const unsigned int g_TLeng=1024;
unsigned long g_maxanz=0;
struct TBuffer
{
char m_Buffer [g_TLeng];
TBuffer (const char *psz = 0)
{
memset (m_Buffer,0,g_TLeng);
if (psz)
{
strncpy (m_Buffer,psz,g_TLeng-1);
}
}
};
typedef list<TBuffer> CHARARRAYLIST;
int del(CHARARRAYLIST& myList, CHARARRAYLIST::iterator& myListPtr)
{
//File.Delete("");
for ( myListPtr=myList.begin() ; myListPtr!=myList.end(); ++myListPtr) //Ausgabe der filenames
{
const TBuffer & ptel = *myListPtr;
if((ptel.m_Buffer[0]=='.') && (ptel.m_Buffer[1]=='.') && (ptel.m_Buffer[2]=='\0') || (ptel.m_Buffer[0]=='.') && (ptel.m_Buffer[1]=='\0'))
{}
else
{
/*char tmpfile[g_dirtmpbuf];
memset(tmpfile,0,sizeof(tmpfile));
strncat(tmpfile,dir,strlen(dir));
strncat(tmpfile,ptel.m_Buffer,sizeof(ptel.m_Buffer));
const char* file=tmpfile;
*/
if(remove(ptel.m_Buffer)==-1)
{
printf( "remove of %s failed: %s\n",ptel.m_Buffer, strerror( errno ) );
}
else
{
printf( "Deleted %s\n",ptel.m_Buffer );
}
}
}
return 0;
}
int readdir(char* dir,char* filter,CHARARRAYLIST& myList, CHARARRAYLIST::iterator& myListPtr)
{
//CHARARRAYLIST myList;
//CHARARRAYLIST::iterator myListPtr; // and an iterator
struct _finddata_t prot;
long hFile;
char tmppath[g_dirtmpbuf];
//bool Found;
memset(tmppath,0,sizeof(tmppath));
strncat(tmppath,dir,strlen(dir));
char tmpdir[g_dirtmpbuf];
memset(tmpdir,0,sizeof(tmpdir));
if (g_maxanz==0)
{
strncat(tmppath,filter,strlen(filter));
if( (hFile = _findfirst(tmppath, &prot )) == -1 )
{
printf( "No files/dirs in current directory!\n" );
}
else
{
//TBuffer fname (prot.name);
strncat(tmpdir,dir,strlen(dir));
strncat(tmpdir,prot.name,strlen(prot.name));
myList.push_back(tmpdir);
while( _findnext(hFile, &prot) == 0 )
{
g_maxanz++;
//TBuffer fname (prot.name);
memset(tmpdir,0,sizeof(tmpdir));
strncat(tmpdir,dir,strlen(dir));
strncat(tmpdir,prot.name,strlen(prot.name));
myList.push_back(tmpdir);
}
printf("%i files were read out\n",g_maxanz);
}
_findclose( hFile );
}
del(myList,myListPtr);
return 0;
}
int main(int argc,const char** argv)
{
if (argc==3)
{
CHARARRAYLIST myList;
CHARARRAYLIST::iterator myListPtr; // and an iterator
char origdir[g_dirtmpbuf];
memset(origdir,0,sizeof(origdir));
strncpy(origdir,argv[1],strlen(argv[1]));
char filter[g_dirtmpbuf];
memset(filter,0,sizeof(origdir));
strncpy(filter,argv[2],strlen(argv[2]));
readdir(origdir,filter,myList,myListPtr);
}
else
{
if (argc<3)
printf("too little arguments\nusage: <dir> <filterrule(e.g. *.*)>\nlook in the Readmer.txt for more Information");
else
printf("too much arguments\nusage: <dir> <filterrule(e.g. *.*)>\nlook in the Readme.txt for more Information\n");
}
return 0;
}
Ich hoffe ihr könnt mir helfen. Vielen Dank schonmal.
P.S.: Dies ist mein 1. post in nem programmiererforum