[Rà‰SOLU]Gestion des extensions de fichier

epetit91epetit91 Membre
mars 2012 modifié dans API AppKit #1
Bonsoir,



Je rencontre une petite difficulté et je souhaite avoir votre avis sur la question.



Par le code suivant, je crée un fichier avec l'extension "tbladata".

Lorsque le panel me demande le nom du fichier et que je clique sur "Masquer l'extension" en bas à  gauche du panel, l'extension apparait ou pas dans le champs de saisie du nom de fichier en fonction de l'état de la case à  cocher correspondante. Jusque là , tout fonctionne parfaitement.



En revanche, si je décide de masquer l'extension (case "Masque l'extension" cochée) et que je valide en cliquant sur "Enregistrer", le fichier est bien créé là  où je le souhaite et avec le nom que j'ai saisi mais l'extension apparaà®t à  la suite du nom du fichier bien que j'ai souhaité qu'elle soit masquée.

Où est l'erreur ?

Aurais-je oublié quelque chose dans mon code ?

Merci pour votre aide.




<br />
	NSSavePanel *panel;<br />
	NSInteger reponse;<br />
	DonneesStruct  donnees;<br />
  <br />
	donnees.champs1 = 0;<br />
	donnees.champs2 = 0;<br />
	donnees.champs3 = 0;<br />
	donnees.champs4 = 0;<br />
	  <br />
// Ouvre un dialogue de création d&#39;un fichier (extension &quot;.tbladata&quot;)<br />
	panel = [NSSavePanel savePanel];<br />
	[panel setRequiredFileType:@&quot;tbladata&quot;];<br />
	[panel setCanSelectHiddenExtension:TRUE];<br />
	reponse = [panel runModal];<br />
  <br />
// Si la sélection est validée : création du fichier et initialisation de l&#39;entête<br />
	if (NSOKButton == reponse)<br />
		[[NSData dataWithBytes:&amp;donnees length:sizeof(donnees)] writeToFile:[[panel filename] stringByExpandingTildeInPath] atomically:YES];<br />

Réponses

  • HerveHerve Membre
    Une petite méthode qui marche très bien, sous X7, mais X6 aussi je crois :
    <br />
    NSSavePanel * savePanel = [NSSavePanel savePanel];<br />
    [savePanel setAllowedFileTypes:[NSArray arrayWithObject:@&quot;pgMidDzo&quot;]];<br />
    [savePanel setCanCreateDirectories:YES];<br />
    [savePanel setExtensionHidden:NO];<br />
    int runResult = (int)[savePanel runModal];<br />
    if (runResult == NSOKButton){<br />
    	   <br />
    	    [data writeToURL:[savePanel URL] atomically:YES] ;<br />
    	   <br />
    }<br />
    
  • Merci Hervé pour ta réponse que j'ai testée.

    Malheureusement, j'obtiens le même résultat qu'avec mon code à  savoir l'extension du fichier n'est pas masquée.

    De plus, avec ton code, si je passe /color][color=#000000]savePanel setExtensionHidden[/color][color=#666600]:[/color][color=#000000]YES[/color][color=#666600, la case à  cocher permettant de sélectionner de masquer ou pas l'extension n'apparait pas.

    Mon problème reste donc entier.

    Merci quand même.
  • Et cette méthode de la classe NSFileManager


    <br />
    [url="http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html#//apple_ref/occ/instm/NSFileManager/setAttributes:ofItemAtPath:error:"]- (BOOL)setAttributes:(NSDictionary *)[i]attributes[/i] ofItemAtPath:(NSString *)[i]path[/i] error:(NSError **)[i]error[/i][/url]<br />
    




    avec NSFileExtensionHidden pour cacher l'extension. Cela correspondrait-il à  ce que tu veux faire ?
  • HerveHerve Membre
    Oui, ou sinon la doc de NSSavePanel donne ces méthodes :



    - setExtensionHidden:
    • [url="file:///Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleLion.CoreReference.docset/Contents/Resources/Documents/documentation/Cocoa/Reference/ApplicationKit/Classes/NSSavePanel_Class/Reference/Reference.html#//apple_ref/occ/instm/NSSavePanel/canSelectHiddenExtension"]– canSelectHiddenExtension[/url]
    • [url="file:///Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleLion.CoreReference.docset/Contents/Resources/Documents/documentation/Cocoa/Reference/ApplicationKit/Classes/NSSavePanel_Class/Reference/Reference.html#//apple_ref/occ/instm/NSSavePanel/setCanSelectHiddenExtension:"]– setCanSelectHiddenExtension:[/url]
    • [url="file:///Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleLion.CoreReference.docset/Contents/Resources/Documents/documentation/Cocoa/Reference/ApplicationKit/Classes/NSSavePanel_Class/Reference/Reference.html#//apple_ref/occ/instm/NSSavePanel/allowedFileTypes"]– allowedFileTypes[/url]
    • [url="file:///Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleLion.CoreReference.docset/Contents/Resources/Documents/documentation/Cocoa/Reference/ApplicationKit/Classes/NSSavePanel_Class/Reference/Reference.html#//apple_ref/occ/instm/NSSavePanel/setAllowedFileTypes:"]– setAllowedFileTypes:[/url]



    Je ne les ai pas essayé.
  • tabliertablier Membre
    mars 2012 modifié #6
    Cacher l'extension dans le sélecteur de fichier et le cacher dans le Finder sont deux choses différentes.

    Pour cacher les extensions dans le sélecteur de fichier, cela se fait dans les paramètres de l"OpenPanel" ou du "savePanel":

    setExtensionHidden:(YES or NO)

    Pour cacher l'extension d'un fichier dans le finder, cela se fait en changeant l'attribut NSFileExtensionHidden avec le FileManager:

    setAttributes:(dictionnaire des attributs) ofItemAtPath:(chemin du fichier) error:NULL
  • Je pensais effectivement que l'état de l'extension était le reflet de la sélection faite dans le dialogue d'enregistrement or il fallait plutôt regarder du côté du FileManager.





    Merci à  tous pour votre aide.
Connectez-vous ou Inscrivez-vous pour répondre.