Proměnlivý název souboru – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Proměnlivý název souboru – C / C++ – Fórum – Programujte.comProměnlivý název souboru – C / C++ – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
RAJJJA0
Duch
19. 12. 2015   #1
-
0
-

Zdravím, mám za úkol vytvořit elektronický diář. Jednotlivé záznamy se budou zapisovat do textaků. Nejprve jsem měl v plánu, že vytvořím funkci, která zkontroluje existující soubory. Např. zaznam0.txt existuje, zaznam1.txt existuje, ale zaznam2.txt neexistuje takže funkce vrátí hodnotu 2 a následně budu moct vytvořit zaznam2.txt. Problém nastal v tom, že při otevírání souboru program nepracuje s názvem souboru zaznam1.txt, jak bych si přál, ale s názvem zaznam[i].txt. Nedaří se mi za [i] dosazovat různé čísla. Přikládám funkci:

int cislosouboru() {
	int j = 0;
	FILE *fr;
	
	for (int i = 0; i < INT_MAX; i++)
	{
		if ((fr = fopen("zaznam[1] .txt", "w")) != NULL) {

			printf("otevreno");
			fclose(fr);
			j++;

		}

		else
		{
			printf("soubor nelze otevrit!\n");
			goto konec;

		}
		konec:
		return j;
	}

}

Bude tu možnost držet se původní myšlenky, nebo jsem celý úkol pojal špatně?

Děkuji za jakoukoliv radu.
 

Nahlásit jako SPAM
IP: 178.77.245.–
Řešení
BDS+3
Věrný člen
19. 12. 2015   #2
-
0
-
Vyřešeno Nejlepší odpověď

#1 RAJJJA 

int cislosouboru() {
	int j = 0;
	char tmp[32];
	FILE *fr;
	
	for (int i = 0; i < INT_MAX; i++)
	{
		sprintf(tmp, "zaznam_%d.txt", i);
		if ((fr = fopen(tmp, "w")) != NULL) {

			printf("otevreno");
			fclose(fr);
			j++;

		}

		else
		{
			printf("soubor nelze otevrit!\n");
			goto konec;

		}
		konec:
		return j;
	}

//(spíš bych použil: sprintf(tmp, "zaznam_%.5d.txt\n", i);
// - ve formátu "zaznam_00000.txt" se to hezky řadí ve složkách
Nahlásit jako SPAM
IP: 185.69.69.–
W10 :)
Kit+15
Guru
19. 12. 2015   #3
-
0
-

#2 BDS
Co dělá ten příkaz "goto"? K čemu tam slouží?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
BDS+3
Věrný člen
19. 12. 2015   #4
-
+1
-
Zajímavé
Kit +

#3 Kit
je tam zbytečný, jen jsem mu opravil ten problém s názvem..

navíc může rovnou vracet i

Nahlásit jako SPAM
IP: 185.69.69.–
W10 :)
RAJJJA0
Duch
19. 12. 2015   #5
-
0
-

Super moc děkuju,
doufám, že už si nějak poradim

Nahlásit jako SPAM
IP: 178.77.245.–
BDS+3
Věrný člen
19. 12. 2015   #6
-
0
-

tady je opravená tvá funkce:

//---C project---
#include <stdio.h>
#include <sys/stat.h>
#include <limits.h>

//---------------------------------------------------------------------------
int FileNoExists(char file[])
{
	struct stat buf;
	return stat(file, &buf);
}
//---------------------------------------------------------------------------
int cislosouboru(void)
{
 char filename[32];
 int i=0;

 for(; i<INT_MAX; i++)
 {
  sprintf(filename, "zaznam_%d.txt", i);
  if(FileNoExists(filename))
  {
   printf("\nnenalezeno: %s", filename);
   return i;
  }
  else
  {
   printf("\nnalezeno: %s", filename);
  }
 }

 return -1; //všechny soubory v rozsahu +int existují - to se asi nikdy nestane....
}
//---------------------------------------------------------------------------

problém je, že při testování pomocí fopen nemusí vždy fungovat správně - například, když bude testovaný soubor zamčený pro čtení jiným procesem.. stat by snad mělo být lepším řešením..

navíc nechápu proč tam máš atribut "w"..

Nahlásit jako SPAM
IP: 185.69.69.–
W10 :)
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý