Προς το περιεχόμενο

Files txt counter ,C++


Leite33

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλημέρα.

Μπορώ να φτιάξω ένα προγραμματάκι να μετράει τα txt αρχεια που υπάρχουν στον σκληρο και να μου επιστρέφει τον αριθμό τους σε C++..

Καμιά ιδέα με κώδικα;; Πως θα μετραω τα αρχεία txt;;; Χρειάζεται να τα ανοίξω με fopen ολα???

Δημοσ.

Κοίτα φίλε μου: Ασχολήθηκα με c++ και με αρχεία και με αρκετές εντολές (πχ fopen κτλ). Εσυ μάλλον θα θές έναν βρόχο :-). Τώρα για το πώς θα ψάχνει στο δίσκο δεν ξέρω....

Δημοσ.

Όχι δεν πρέπει να ανοίξεις κανένα με fopen, αυτό έλειπε.

 

Για δική σου χρήση είναι ή άσκηση?

Σε Windows αυτό γίνεται με τη χρήση WinAPI. Δεν γίνεται μονομιάς με μια εντολή, θα πρέπει να φτιάξεις μια συγκεκριμένη διαδικασία...

Δημοσ.

Ναι ρε σεις ενταξει δε χρειάζεται να ανοίξω αλλα πως θα μετρήσω τα αρχεία??????? Απλως ειπα μηπως χρειάζεται να τα ανοίξω μήπως είναι πιο ευκολο να τα μετρήσεις.. Αλλα και για οτιδήποτε άλλο η γενικα να μετρήσεις τους φακέλους-αρχεία στο σκληρό η σε ένα άλλο φάκελο;;;

Ναι για δική μου χρήση είναι θέλω να πειραματιστώ να μάθω 5 πράγματα.. Δε με πειράζει αν θα είναι εφαρμογή. Ετσι κι αλλιως αμα υλοποιηθεί το πετάς σε ενα κουμπί και τελείωσες... Απλως θέλω καμιά ιδέα κώδικα.

Δημοσ.

Σου είπα φίλε μου, χρειάζεται WinAPI, δεν υπάρχει καμία στάνταρ εντολή που να χρησιμοποιήσεις για να φτιάξεις κάτι τέτοιο. Αν δεν δουλεύεις κάποιο framework ή άλλον wrapper πρέπει να ξέρεις WinAPI. Λοιπόν?

 

Υ.Γ. Στο site της υπογραφής μου στο background ο κώδικας που φαίνεται προέρχεται από τέτοια διαδικασία.

Δημοσ.
>
//---------------------------------------------------------------------------

#include <stdio.h>
#include <string.h>
#include <windows.h>
#pragma hdrstop

#include <tchar.h>
//---------------------------------------------------------------------------

#pragma argsused
int _tmain(int argc, _TCHAR* argv[])
{
static int CountTxtFiles = 0;
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
char *dotPtr = NULL;
char *directory = strdup(argv[1]);
directory[strlen(argv[1])-6] = '\0';

if(argc != 2)
{
	_tprintf(TEXT("Usage %s[target file]\n"), argv[0]);
	return;
}

_tprintf (TEXT("Target file is %s\n"), argv[1]);
hFind = FindFirstFileEx(argv[1],
					   FindExInfoStandard,
                          &FindFileData,
                          FindExSearchNameMatch,
                          NULL, 0);

    if (hFind == INVALID_HANDLE_VALUE)
{
     printf ("FindFirstFileEx failed (%d)\n", GetLastError());
     return;
}
else
  {
	CountTxtFiles++;
   while(FindNextFile(hFind, &FindFileData))
   {
	   /* Find the '.' in the filename. */
		dotPtr = strchr(&FindFileData.cFileName, '.');
		if(dotPtr)
		{
			dotPtr++;
			if(!strcmp(dotPtr, "txt"))
				CountTxtFiles++;
		}
   }
  }
  _tprintf(TEXT("Found %d 'txt' files in directory %s\n"), CountTxtFiles, directory);
  free(directory);
  getchar();
return 0;
}
//---------------------------------------------------------------------------

Δημοσ.

Περίπου όπως του bokarinho ή του link του georgemarios, μόνο που αυτά δεν βρίσκουν τα αρχεία στα subdirectories. Πρέπει να μαζεύεις όλους τους υποφακέλους στη μνήμη (εννοείται με δυναμικό allocation) και να τους ψάξεις έναν έναν για να γίνει αυτό.

Δημοσ.
Καλημέρα.

Μπορώ να φτιάξω ένα προγραμματάκι να μετράει τα txt αρχεια που υπάρχουν στον σκληρο και να μου επιστρέφει τον αριθμό τους σε C++..

Καμιά ιδέα με κώδικα;; Πως θα μετραω τα αρχεία txt;;; Χρειάζεται να τα ανοίξω με fopen ολα???

 

Όπως σου είπε ο Parsifal μπορείς να βασισθείς σε POSIX αντί του Windows API. Επίσης μπορείς να χρησιμοποιήσεις την λύση του Bokarinho και τέλος αν θες να "σκανάρεις" όλα τα αρχεία της μονάδας μπορείς να δεις εδώ: http://www.insomnia.gr/forum/showpost.php?p=2450169&postcount=6 όπου με την βοήθεια POSIX εντολών βρίσκουμε όλα τα αρχεία του δίσκου -φυσικά θα πρέπει να προσθέσεις έναν μετρητή που θα αυξάνεται όταν το αρχείο έχει κατάληξη .TXT (δες τον κώδικα του Bokarinho).

 

Καλή τύχη!

 

Υ.Γ.

Αν γράφεις VCL κώδικα, μπορείς επίσης να χρησιμοποιήσεις και τις FindFirst/FindNext/FindClose & TSearchRec.

 

Τέλος, αν πρόκειται για εμπορικό software καλό είναι να λάβεις υπόψη σου την υποστήριξη Unicode χρησιμοποιώντας τις ανάλογες Unicode enabled ρουτίνες (πχ. FindFirstFileW του WinAPI κτλ) ώστε να διαχειρίζεσαι αρχεία ή φακέλους που μπορεί να έχουν Unicode χαρακτήρες.

Δημοσ.
Όπως σου είπε ο Parsifal μπορείς να βασισθείς σε POSIX αντί του Windows API.

Εφόσον αναφερόμαστε σε Windows, το πλεονέκτημα του "POSIX αντί του Windows API" ποιό στην ευχή είναι?

Δημοσ.
Περίπου όπως του bokarinho ή του link του georgemarios, μόνο που αυτά δεν βρίσκουν τα αρχεία στα subdirectories. Πρέπει να μαζεύεις όλους τους υποφακέλους στη μνήμη (εννοείται με δυναμικό allocation) και να τους ψάξεις έναν έναν για να γίνει αυτό.

χωρις να το εχω δοκιμασει, το λινκ που εδωσα νομιζω μετρα και τα αρχεια των υποφακελων καλωντας αναδρομικα τη συναρτηση.......

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...