IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

[Linux] Pourquoi ark fonctionne en ligne de commande et pas dans mon programme


Sujet :

C

  1. #1
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 323
    Par défaut [Linux] Pourquoi ark fonctionne en ligne de commande et pas dans mon programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    if(rtcd!=REG_NOMATCH) // the file is a .duf extension file
    	{
    		sprintf(ErrMsg,"[%s] %s is a .duf file...\n",__func__,duffile);
    		Log(logFile,ErrMsg);
     
    		Log(logFile,"...uncompressing...");
     
    		char *command=calloc(255,1);
    		sprintf(command,"ark -b ./%s -o ./%s",duffile,tmpdirforunzip);
     
     
    		wprintf(L"%s\n",command);
    		system(command);
     
    		return;
    	}
    Je suis censé écrire un programme qui décompresse des fichiers .duf (dont KDE ark permet d'en extraire le contenu -> un fichier JSON)... et d'effectuer des oéprations sur le fichier texte ainsi obtenu.
    Je n'ai pas trouvé de librairie C qui permette de prendre en charge le .duf... (zlib ne reconnaît pas le format, libunrar pareil, etc...)

    Du coup, je suis forcé d'utiliser cette commande de noob "command".
    Le soucis c'est que quand cette partie de code est exécutée j'obtiens de KDE ark "le fichier ne peut pas être ouvert"...

    Lorsque je suis dans le même working directory du programme et que j'exécute exactement la même commande passée à system() à savoir "ark -b ./testfiles/cefichier.duf -o ./output" ça fonctionne...
    Pourquoi system() semble ne pas être dans le même "working directory" ?
    Pourquoi j'obtiens un autre comportement qu'en bash ?

  2. #2
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 323
    Par défaut
    Bon, il s'avère que si le répertoire "cible" existe déjà même avec un chmod +777, ark ne semble pas vouloir fonctionner... il faut préalablement l'effacer avec un "rm -Rf " :{

  3. #3
    Membre expérimenté

    Homme Profil pro
    Enseignant
    Inscrit en
    Septembre 2012
    Messages
    323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Septembre 2012
    Messages : 323
    Par défaut
    ...au cas où... voici comment j'ai procédé...

    Les fichiers utilisés par DAZ 3D sont des fichiers avec l'extension .duf... en fait il s'agit d'un fichier au format json en mode texte qui est "archivé" au format .zip.

    J'ai essayé plusieurs "outils" pour décompresser ceux-ci et (pour l'instant) il n'y a que ark qui fonctionne vraiment.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    	        // **************************************************************************
    		// UNCOMPRESSING .duf FILE
    		// **************************************************************************
     
    		char *command=calloc(255,1);
    		char *pSeek=NULL;
     
    		sprintf(command,"ark -b ./%s",duffile);
    		system(command);		
     
    		sprintf(LogMsg,"\t%s file uncompressed",duffile);
    		Log(logFile,LogMsg);
     
    		free(command);
     
    		// **************************************************************************
    		// END
    		// **************************************************************************
    ...je n'ai pas accès à une librairie concernant KDE Ark... pas beaucoup cherché non plus...

    Pour la compression, je pourrais à mon avis utiliser la librairie C liée à zip/gzip mais là, flemmard, j'utilise l'outil tel quel...
    J'ai effectué les traitements dans le fichier json mais pour que DAZ 3D puisse l'ouvrir je dois reprendre ce fichier et le compresser avec l'extension .duf...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
                    // **************************************************************************
    		// COMPRESSING IN .duf FORMAT 
    		// **************************************************************************
     
    		newname=NULL;
    		newname=calloc(FILENAME_MAX,1);
     
    		// renommer .processed 
     
    		pSeek=strstr(destname,".processed");
    		if(pSeek)
    		{
    			strncpy(newname,destname,(pSeek-destname));
    		}
     
    		unlink(newname);
    		rename(destname,newname);
     
    		// préparer l'archivage avec l'extension .duf
     
    		sprintf(destname,"%s.duf",newname);
    		unlink(destname);
     
    		// archiver au format .duf
     
    		command=calloc(255,1);
    		sprintf(command,"cat %s | gzip --fast > %s.duf",newname,newname);
     
    		system(command);
    		unlink(newname);
     
    		// **************************************************************************
    		// END
    		// **************************************************************************
    Ca marche... c'est pas top mais je sais faire les opérations voulues et DAZ 3D ouvre les fichiers sur lesquels j'ai fait les manips sans erreurs.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 11
    Dernier message: 15/05/2023, 14h17
  2. Réponses: 4
    Dernier message: 14/12/2015, 21h11
  3. Commande mail fonctionne en ligne de commande et pas dans script sh
    Par blumi31 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 22/02/2013, 09h27
  4. [ODBC] Connection fonctionne avec ligne de commande mais pas sur site
    Par maxeur dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 29/03/2010, 15h33
  5. Réponses: 1
    Dernier message: 06/09/2007, 10h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo