Übergabeparameter stat

Christian1985

Grünschnabel
Servus leute,

folgendes Problem: ich versuche mit stat auf das Anlegedatum einer Datei zuzugreifen, es klappt aber leider nicht weil wahrscheinlich mein übergabeparameter nicht stimmt. Ich versuche im unteren Programmabschnitt den Programmpfad an stat zu übergeben, desweiteren wandele ich danach das Anlegedatum in ein für mich passendes Format um um es passend als Dateiname an die Kommandozeile zu übergeben. Lösungswünsche auch wenn sie vom unten angegebenen Programm abweichen zu schreiben. Bedanke mich schon mal im vorraus für eure Hilfe.

mfg Christian

Hier der Code:

Code:
                 //Datum einfügen in Pfad einfügen
                     struct stat s;
                     char pfad[255];
                     string pfad_help;
                     strcat(pfad, input_dir);
                     strcat(pfad,"\\");
                     strcat(pfad, name.c_str());
                     strcat(pfad, ".hps");
                     string zeit_ctime = "";
                     char zeit_gewandelt[20], zeit_help[255]; 
                     pfad_help = pfad;
                     stat(pfad_help.c_str(), &s);
                     zeit_ctime = ctime(&s.st_ctime);
                     strcpy(zeit_help,zeit_ctime.c_str());
                     zeit_gewandelt[0] = zeit_help[20];
                     zeit_gewandelt[1] = zeit_help[21];
                     zeit_gewandelt[2] = zeit_help[22];
                     zeit_gewandelt[3] = zeit_help[23];
                     zeit_gewandelt[4] = '-';
                     zeit_gewandelt[5] = zeit_help[4];
                     zeit_gewandelt[6] = zeit_help[5];
                     zeit_gewandelt[7] = zeit_help[6];
                     zeit_gewandelt[8] = '-';
                     zeit_gewandelt[9] = zeit_help[8];
                     zeit_gewandelt[10] = zeit_help[9];
                     zeit_gewandelt[11] = '-';
                     zeit_gewandelt[12] = zeit_help[11];
                     zeit_gewandelt[13] = zeit_help[12];
                     zeit_gewandelt[14] = zeit_help[14];
                     zeit_gewandelt[15] = zeit_help[15];
                     
                     strcat(command, zeit_gewandelt);
                     strcat(command, ".hps\"");
                   //Befehl in Kommandozeile eingeben
                     cout << command << endl;       
                     system(command);
 
Hi.
Code:
                 //Datum einfügen in Pfad einfügen
                     char pfad[255];
                     string pfad_help;
                     strcat(pfad, input_dir);
Die Funktion strcat hängt an einen bestehenden String noch etwas an. Wie sieht denn der "bestehende String" bei dir aus? Der String ist uninitialisiert und damit kannst du nicht sagen wie der String aussieht. Da dann noch etwas anzuhängen ist reines Glücksspiel.

Warum machst du's so kompliziert? Wenn du C++ hast, kannst du doch durchgängig einfach std::string verwenden:
C++:
string pfad(input_dir);

pfad += "\\" + name + ".hps";

if (stat(pfad.c_str(), &s) == 0) {
  struct *tm ctime = localtime(s.st_ctime);
  char buf[50];

  if (strftime(buf, sizeof(buf), "%Y-%b-%d-%T", ctime) != 0) {
    string command = "\"prog ";

    prog += buf + ".hps\"";

    system(command.c_str());
  }
}
Gruß
 
servus nochmal,
danke schon mal für deine hilfe deep ich habe jetzt aber folgendes Problem: der Compiler spuckt mir Fehler aus die ich persönlich nicht wegbekommen wenn ich dein Programmabschnitt einfüge. ICh hab jetzt mal den ganzen Code des Programms online gestellt das man sich ein besseres Bild verschaffen kann auf was ich eigentlich hinaus möchte.

Code:
 //Sortieralgorythmus in Endlosschleife =) by CM

#include <sys/types.h>
#include <dirent.h>
#include <windows.h>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <time.h>
#include <stdio.h>
#include <sstream>
#include <sys/stat.h>


using namespace std;


int main(int argc, char *argv[])
{
    
    //Einstellungen aus herrmann_scan.ini lesen
    char input_dir[255];
    char rechnung_dir[255];
	string filename;
	int auswahl = 0;
	int zaehler = 0;
	
	
 	DWORD destSize;
 	destSize=255;
	
	//Einstellungen aus ini Datei lesen
	GetPrivateProfileString("DIRS", "input_dir", "NULL", input_dir, destSize, ".\\herrmann_scan.ini");
	GetPrivateProfileString("DIRS", "rechnung_dir", "NULL", rechnung_dir, destSize, ".\\herrmann_scan.ini");

    //Verzeichnis öffnen
    DIR *dir;
    struct dirent *dirzeiger;
    bool ende = false;
    
    if ((dir = opendir(input_dir)) == NULL) 
    {
      fprintf(stderr,"\nFehler beim öffnen des Eingangsordners...\n");
      return -1;
    }
  
    //Verzeichnis parsen
    char input_file_name[255];
    char command[500];
    char* pdest;

    while (!ende)
    {
        Sleep(2000);
        while((dirzeiger=readdir(dir)) != NULL)
        {
            pdest = strstr((*dirzeiger).d_name, ".hps");
            if( pdest != NULL )
		    {
		        strcpy(input_file_name, (*dirzeiger).d_name);
                
                cout << "Datei gefunden: " << input_file_name << "\n";
		        
		        //0tx Datei zum lesen öffnen
                char openfile[255];
                
                strcpy(openfile, input_dir);
                strcat(openfile, "\\");
		        strcat(openfile, input_file_name);
                
                cout << openfile << "\n" << endl;
                
                ifstream file(openfile);
                		        
		        //Formularname auslesen
		        string line;
		        string nummer;
		        int size_zeile, size_auftrag;
                int zaehler;		        
                int position, help;
                int anzahl; 
                char auftragsnummer[255];
                while (getline(file, line))
                {
                   pdest = strstr(line.c_str(), "Rechnung");   
                   if (pdest != NULL) {
                      //cout << "Rechnungspfad" << endl;
                      auswahl = 1;
                      filename = "RE-";
                   }
                }
                //001 Datei schließen
                file.close();
                
                if (auswahl != 0)
                {
                    string name;                                               
                    name = strtok(input_file_name, ".");
                    
                 //Alter Pfad 
                    strcpy(command, "move \"");
		            strcat(command, input_dir);
		            strcat(command, "\\");
                    strcat(command, name.c_str());
   		            strcat(command, ".hps\"");
   		            
                 //Neuer Pfad 
                    strcat(command, " \"");     
                    
                    //Pfadauswahl     
                    strcat(command, rechnung_dir);
                    strcat(command, "\\");
                 //Dateiname einfügen
   		            strcat(command, filename.c_str());
   		            
                    
                 //Datum einfügen in Pfad einfügen
                     struct stat s;
                     //char pfad[255];
                     string pfad_help;
                     
                     string pfad(input_dir);
                     pfad += "\\" + name + ".hps";
                     if (stat(pfad.c_str(), &s) == 0) {
                        struct *tm ctime = localtime(s.st_ctime);
                        char buf[50];
                        if (strftime(buf, sizeof(buf), "%Y-%b-%d-%T", ctime) != 0) {
                                strcat(command, buf);
                                strcat(command, ".hps\"");
                                system(command);
                        }
                     } 
                }
		    }
        }
        
        rewinddir(dir);
        auswahl = 0;
        
        cout << zaehler << endl;
        zaehler++;
    }   
    //Verzeichnis schliessen
    if (closedir(dir) == -1) {
        printf("\nFehler beim Schliessen von, %s\n", input_dir);
        return -2;
    }
}

folgende Fehler spuckt mir der Compiler aus:
126 C:\xxx\main.cpp expected primary-expression before "struct"
126 C:\xxx\main.cpp expected `;' before "struct"
128 C:\xxx\main.cpp cannot convert `char*(*)(const time_t*)' to `const tm*' for argument `4' to `size_t strftime(char*, size_t, const char*, const tm*)'


//EDIT: Die Compilefehler hab ich gelöst bekommen eigentlich ne ganz einfache geschichte =). Aber das Problem ist das gleiche das anlegedatum der Dateien ist LAUT C-Programm: "1969-Dec-31-2300" das eigentliche Anlegedatum ist aber der 2007-Dec-04. Also wie mir scheint sind das die Default einstellungen =(.
 
Zuletzt bearbeitet:
von vornherein mal sorry für den doppelpost.
nochmal danke an deepthroat der mir den entscheidenden tipp für das programm geliefert hat.

Code:
#include <sys/types.h>
#include <dirent.h>
#include <windows.h>
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <time.h>
#include <stdio.h>
#include <sstream>
#include <sys/stat.h>


using namespace std;


int main(int argc, char *argv[])
{
    
    //Einstellungen aus herrmann_scan.ini lesen
    char input_dir[255];
    char rechnung_dir[255];
	string filename;
	int auswahl = 0;
	int zaehler = 0;
	
	
 	DWORD destSize;
 	destSize=255;
	
	//Einstellungen aus ini Datei lesen
	GetPrivateProfileString("DIRS", "input_dir", "NULL", input_dir, destSize, ".\\herrmann_scan.ini");
	GetPrivateProfileString("DIRS", "rechnung_dir", "NULL", rechnung_dir, destSize, ".\\herrmann_scan.ini");

    //Verzeichnis öffnen
    DIR *dir;
    struct dirent *dirzeiger;
    bool ende = false;
    
    if ((dir = opendir(input_dir)) == NULL) 
    {
      fprintf(stderr,"\nFehler beim öffnen des Eingangsordners...\n");
      return -1;
    }
  
    //Verzeichnis parsen
    char input_file_name[255];
    char command[500];
    char* pdest;

    while (!ende)
    {
        Sleep(2000);
        while((dirzeiger=readdir(dir)) != NULL)
        {
            pdest = strstr((*dirzeiger).d_name, ".hps");
            if( pdest != NULL )
		    {
		        strcpy(input_file_name, (*dirzeiger).d_name);
                
                cout << "Datei gefunden: " << input_file_name << "\n";
		        
		        //0tx Datei zum lesen öffnen
                char openfile[255];
                
                strcpy(openfile, input_dir);
                strcat(openfile, "\\");
		        strcat(openfile, input_file_name);
                
                cout << openfile << "\n" << endl;
                
                ifstream file(openfile);
                		        
		        //Formularname auslesen
		        string line;
		        string nummer;
		        int size_zeile, size_auftrag;
                int zaehler;		        
                int position, help;
                int anzahl; 
                while (getline(file, line))
                {
                   pdest = strstr(line.c_str(), "Rechnung");   
                   if (pdest != NULL) {
                      //cout << "Rechnungspfad" << endl;
                      auswahl = 1;
                      filename = "RE-";
                   }
                }
                //001 Datei schließen
                file.close();
                
                if (auswahl != 0)
                {
                    string name;            
                    char command2[255];                                   
                    name = strtok(input_file_name, ".");
                    
                 //Alter Pfad 
                    strcpy(command, "move \"");
		            strcat(command, input_dir);
		            strcat(command, "\\");
                    strcat(command, name.c_str());
                    strcpy(command2, command);
   		            strcat(command, ".hps\"");
   		            strcat(command2, "_ocr.pdf\"");
                 //Neuer Pfad 
                    strcat(command, " \"");     
                    strcat(command2, " \""); 
                    //Pfadauswahl     
                    strcat(command, rechnung_dir);
                    strcat(command2, rechnung_dir);
                    strcat(command, "\\");
                    strcat(command2, "\\");
                 //Dateiname einfügen
   		            strcat(command, filename.c_str());
   		            strcat(command2, filename.c_str());
                 //Datum einfügen in Pfad einfügen
                     struct stat s;
                     string pfad(input_dir);
                     pfad += "\\" + name + ".hps";
                     if (stat(pfad.c_str(), &s) == 0) {
                        struct tm * ctime = localtime(&s.st_mtime);
                        char buf[50];
                        if (strftime(buf, sizeof(buf), "%Y-%m-%d-%H%M", ctime) != 0) {
                                strcat(command, buf);
                                strcat(command2, buf);
                                strcat(command2, ".pdf\"");
                                strcat(command, ".hps\"");
                                system(command2);
                                system(command);
                        }
                     } 
                }
		    }
        }
        rewinddir(dir);
        auswahl = 0;
        
        cout << zaehler << endl;
        zaehler++;
    }   
    //Verzeichnis schliessen
    if (closedir(dir) == -1) {
        printf("\nFehler beim Schliessen von, %s\n", input_dir);
        return -2;
    }
}
 
Zurück