Torna indietro   Hardware Upgrade Forum > Software > Programmazione

HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione
HONOR ha finalmente lanciato il suo nuovo flagship: Magic 8 Pro. Lo abbiamo provato a fondo in queste settimane e ve lo raccontiamo nella nostra recensione completa. HONOR rimane fedele alle linee della versione precedente, aggiungendo però un nuovo tasto dedicato all'AI. Ma è al suo interno che c'è la vera rivoluzione grazie al nuovo Snapdragon 8 Elite Gen 5 e alla nuova MagicOS 10
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata
Le webcam Insta360 Link 2 Pro e Link 2C Pro sono una proposta di fascia alta per chi cerca qualità 4K e tracciamento automatico del soggetto senza ricorrere a configurazioni complesse. Entrambi i modelli condividono sensore, ottiche e funzionalità audio avanzate, differenziandosi per il sistema di tracciamento: gimbal a due assi sul modello Link 2 Pro, soluzione digitale sul 2C Pro
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza
Motorola edge 70 porta il concetto di smartphone ultrasottile su un terreno più concreto e accessibile: abbina uno spessore sotto i 6 mm a una batteria di capacità relativamente elevata, un display pOLED da 6,7 pollici e un comparto fotografico triplo da 50 MP. Non punta ai record di potenza, ma si configura come alternativa più pragmatica rispetto ai modelli sottili più costosi di Samsung e Apple
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-01-2012, 23:54   #1
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
[C++] Controllare se un file è vuoto

Stavo pensando ai vari modi per controllare se un file è vuoto, cioè non ci sono caratteri oppure ci sono solo whitespace (mi limito a spazio, newline, tab).
Ne sono venuto fuori con questo:
Codice:
	// Check for empty file
	char c;
	while (fileIn.get(c)) {
		// If c is not a whitespace, go back 1 char and quit the loop
		if (c != ' ' && c != '\n' && c != '\t') {
			fileIn.unget();
			break;
		}

		// If so far there were only whitespaces, and peek() generates eof() == 1, file is empty
		fileIn.peek();
		if (fileIn.eof()) {
			cout << endl << "The file is empty, you monkey!!" << endl;
			return 0;
		}
	}
che sembra funzionare per file che contengono almeno un whitespace. Se il file invece è proprio vuoto, il loop while non parte perchè fileIn.get(c) fallisce. Dovrei quindi aggiungere un paio di righe:
Codice:
	// Check for empty file
	char c;
	while (fileIn.get(c)) {
		// If c is not a whitespace, go back 1 char and quit the loop
		if (c != ' ' && c != '\n' && c != '\t') {
			fileIn.unget();
			break;
		}

		// If so far there were only whitespaces, and peek() generates eof() == 1, file is empty
		fileIn.peek();
		if (fileIn.eof()) {
			cout << endl << "The file is empty, you monkey!!" << endl;
			return 0;
		}
	}
	if (fileIn.eof()) {
		cout << endl << "The file is empty, you monkey!!" << endl;
		return 0;
	}
Un altro modo sarebbe controllare prima del loop:
Codice:
	// Check for empty file
	fileIn.peek();
	if (fileIn.eof()) {
		cout << endl << "The file is empty, you monkey!!" << endl;
		return 0;
	}
	char c;
	while (fileIn.get(c)) {
		// If c is not a whitespace, go back 1 char and quit the loop
		if (c != ' ' && c != '\n' && c != '\t') {
			fileIn.unget();
			break;
		}

		// If so far there were only whitespaces, and peek() generates eof() == 1, file is empty
		fileIn.peek();
		if (fileIn.eof()) {
			cout << endl << "The file is empty, you monkey!!" << endl;
			return 0;
		}
	}
Ho sbagliato molto in passato perchè non sapevo che eof() è posto = 1 dalla precedente lettura del file, ma ora che lo so gli faccio precedere un peek() che, seppur non estrae alcun carattere, si accorge se la fine del file è arrivata.
A parte questo, che ne pensate di questo metodo? Ce ne sono di migliori (ed intendo più efficienti)? Questo (3° versione) mi pare carino: se il file è vuoto se ne accorge subito, se ci sono un sacco di spazi vuoti prima della prima lettera di testo li salta (il cursore del file torna indietro con unget() e da lì continua).
Ci sono bug che mi sfuggono?
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2012, 01:21   #2
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Se ne è parlato circa una settimanella fa.... controlli semplicemente la dimensione... 3 comandi, 3 righe di codice

1) fopen
2) fseek
3) ftell
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2012, 02:16   #3
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da clockover Guarda i messaggi
Se ne è parlato circa una settimanella fa.... controlli semplicemente la dimensione... 3 comandi, 3 righe di codice

1) fopen
2) fseek
3) ftell
Uhm allora userò la ricerca, come avrei già dovuto fare
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2012, 10:28   #4
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Uhm uhm, parli di questo esempio:
Codice:
#include <stdio.h>

int main ()
{
  FILE * pFile;
  long size;

  pFile = fopen ("myfile.txt","rb");
  if (pFile==NULL) perror ("Error opening file");
  else
  {
    fseek (pFile, 0, SEEK_END);
    size=ftell (pFile);
    fclose (pFile);
    printf ("Size of myfile.txt: %ld bytes.\n",size);
  }
  return 0;
}
Però se il file è fatto di whitespace non se ne accorge! E poi voglio usare le classi di fstream, non le vecchie funzioni del C
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2012, 10:36   #5
clockover
Senior Member
 
L'Avatar di clockover
 
Iscritto dal: Oct 2004
Messaggi: 1945
Quote:
Originariamente inviato da vendettaaaaa Guarda i messaggi
Però se il file è fatto di whitespace non se ne accorge! E poi voglio usare le classi di fstream, non le vecchie funzioni del C
a si ok adesso ho capito non avevo letto bene la tua richiesta... tu vuoi vedere se il file è vuoto oppure se non lo è se ha solo spazi whitespace, tabs, newline, ecc... allora misà che ti tocca leggere tutto il file
clockover è offline   Rispondi citando il messaggio o parte di esso
Old 22-01-2012, 10:48   #6
vendettaaaaa
Senior Member
 
L'Avatar di vendettaaaaa
 
Iscritto dal: Jan 2012
Messaggi: 1267
Quote:
Originariamente inviato da clockover Guarda i messaggi
a si ok adesso ho capito non avevo letto bene la tua richiesta... tu vuoi vedere se il file è vuoto oppure se non lo è se ha solo spazi whitespace, tabs, newline, ecc... allora misà che ti tocca leggere tutto il file
Eh infatti per quello chiedevo se ci fossero metodi più efficienti...anche se tutto sommato, a meno di file giganti direi che il metodo va già bene.
vendettaaaaa è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


HONOR Magic 8 Pro: ecco il primo TOP del 2026! La recensione HONOR Magic 8 Pro: ecco il primo TOP del 2026! L...
Insta360 Link 2 Pro e 2C Pro: le webcam 4K che ti seguono, anche con gimbal integrata Insta360 Link 2 Pro e 2C Pro: le webcam 4K che t...
Motorola edge 70: lo smartphone ultrasottile che non rinuncia a batteria e concretezza Motorola edge 70: lo smartphone ultrasottile che...
Display, mini PC, periferiche e networking: le novità ASUS al CES 2026 Display, mini PC, periferiche e networking: le n...
Le novità ASUS per il 2026 nel settore dei PC desktop Le novità ASUS per il 2026 nel settore de...
OPPO lancia in Italia la serie Reno15: n...
Stazione Spaziale Internazionale: rientr...
Forza Horizon 6: spunta la possibile dat...
Oral-B iO: sconti pazzeschi su spazzolin...
Intel Core Ultra 200 Plus: l'azienda pro...
Thinking Machines: la startup di Mira Mu...
Coalizione di gruppi di tutela chiede a ...
Reprompt è l'attacco invisibile s...
Robot aspirapolvere ECOVACS DEEBOT N20 P...
Batteria a stato solido: tra tre mesi Do...
iPhone 17 Pro in forte sconto su Amazon:...
Apple Studio Display finalmente in offer...
OpenAI sfida Google e lancia ChatGPT Tra...
Attenti ai commenti LinkedIn: come ricon...
Xiaomi Redmi Note 15 al prezzo minimo ga...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 12:54.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v