Trakoitus olisi toteuttaa ohjelma mikä vaihtaa tiedostolle uuden nimen. Uuden nimen se ottaisi eri tiedostolta ja kun nimi on vaihdettu se tiedosto jolta nimi otettiin tuhottaisiin.Uudelleen nimetty tiedosto sitten lähettettäisiin eteenpäin! Lähinnä c :lla olisi tarkoitus tehdä! Tiedoston mallitehtävistä ei juuri apuja tähän saa. Vinkkejä!!
koodaus apua tarvin!
g
2345
0Äänestä
Muut lukivat myös
Odottaa vastausta
Näihin keskusteluihin ei ole vielä vastattu. Ole ensimmäinen.
Vastaukset 2
Vanhimmat
kuulostaa nimittäin tuo koodaamasi ohjelman toimintamalli ihan näiltä viimeaikaisilta viruksilta. tartuta koneesi jollain sopivalla viruksella (klez?) ja tutki niiden lähdekoodia...
Tässä olisi pieni koodinpätkä, joka käsittelee hakemistoa ja tiedostoja monipuolisesti. Haluamaasi tarkoitukseen avattavan tiedoston nimi pitää valita hakemistosta löytyneistä(nehän etsitään tässä), ja alkuperäinen tuhota lopuksi (sitä en taida näyttää, mutta sekin lukee alkuotsikoissa)
Muuntele haluamaksesi:
/**
* @file generoihtml.c 0.92
*
* Generoi hakemistolistauksen htmlsivuksi, jossa
* tiedostot linkkeinä.
* @author n.n. 01/2002
* @see Kernigan, Ritchie 2000: C-ohjelmointi
* Warren Guy 1999: Linux-ohjelmointi
* @param Ensimmäisenä parametrina syntyvä html-tiedosto.
* Huom. tuhoaa ensin olemassaolevan samannimisen
* tiedoston. Seuraavat parametrit ovat läpikäytävien
* tiedostojen nimet. Korvausmerkit käyvät.
*
* @versio 0.90 Perusversio 14/01/2002
* 0.91 Lisätty hakemistonkäsittely
* 0.92 Lisätty funktiot pwd ja basename 17/01/2002
*
* @example Esimerkiksi
*/ // generoihtml index0.html dokut/*.pdf *.htm*
/* generoi index0.html tiedostoon linkit yhden ylempänä
* olevan dokutt hakemiston kaikista adobe-pdf ja
* paikallisen hakemiston .htm .html webbisivuista
* poistaen hakemistopolun alkuosan käyttäjälle
* näkyvistä nimistä ,mutta jättää alkuosan
* (suhteellisen polun) linkkeihin.
*
* @compilers Tested with GNU compiler v. 2.95 - 3.03
* Unix (solaris 7), win98, NT4, win2000:
* You don't need note backslashs in win environment,
* if you have cygwin gcc installed.
*/
#include
#include
#include
#include
#include
#include
#include
void fname(char *hakemisto, char *name, FILE *fp);
void fteeheaderi(FILE *fp);
void fteefooteri(FILE *fp);
char *basename(char *name);
char *pwd(char *name);
int main(int argc, char **argv)
{
FILE *fp;
char argkoostettava[256];
char *hakemisto="";
strcpy(argkoostettava, argv[1]);
fprintf(stderr, "Argumettien määrä: %d
", argc);
/* Siirry hakemistoon ja ota pwd talteen */
if ( strcmp(argv[1], basename(argv[1])) )
{
hakemisto = pwd(argv[1]);
if ( !chdir(hakemisto))
fprintf(stderr, "Ei voi siirtyä hakemistoon %s, tai ollaan jo siellä.
"
, hakemisto);
}
if (argc ==1)
{
if ( (fp = fopen("index0.html", "w")) == NULL )
fprintf(stderr,"Ei voi avata syöttö html-tiedostoa %s
", "index0.html");
fflush(fp);
fname(hakemisto, ".", fp);
}
else
{
/* avaa syöttötiedosto, älä lisää alkuosaa */
if (--argc > 0)
if ( (fp = fopen(*++argv, "w")) == NULL )
fprintf(stderr,"Ei voi avata syöttö html-tiedostoa %s
", *argv);
fflush(fp);
fteeheaderi(fp);
/* lue tiedostot, lisää alkuosa */
while (--argc > 0)
{
/* älä listaa muodostettavaa tiedostoa itseensä */
if ( !strcmp(argkoostettava, *++argv) )
continue;
if ( strlen(hakemisto) &&
!strncmp( hakemisto, *argv, strlen(hakemisto)) )
*argv = *argv + strlen(hakemisto) + 1;
/* muuten ok. Huom. arvoa lisätty jo vertailussa */
fname (hakemisto, *argv, fp);
}
}
fteefooteri(fp);
fclose(fp);
return 0;
}
void fname(char *hakemisto, char *name, FILE *fp)
{
struct stat stbuf;
char lnimi[256]="";
/*strcpy (lnimi, hakemisto);*/
strcat (lnimi, name);
if ( stat(lnimi, &stbuf) == -1)
{
fprintf(stderr, "Ei voi käsitellä tiedostoa %s ", lnimi);
fprintf(stderr, "ERRNO: %d
", errno);
return;
}
/* Siirrä pointteria näkyvässä name:ssa */
name = basename(name);
/* jätä linkkiin alkuosa, muttei näkyvään nimeen */
fprintf(fp, "%s
", lnimi, name);
}
char *basename(char *name)
{
char *pc;
if ( (pc=strrchr(name, '/')) != NULL)
return pc + 1;
return name;
}
char *pwd(char *name)
{
char *pc;
char *retname;
retname = strdup(name);
if ( (pc=strrchr(retname, '/')) != NULL)
{
*pc = '';
return retname;
}
return name;
}
void fteeheaderi(FILE *fp)
{
fprintf (fp, "
");
fprintf (fp, "
DOKUMENTTEJA
");
}
void fteefooteri(FILE *fp)
{
fprintf (fp, "
");
}