créer un fichier avec NSData

prepa75prepa75 Membre
14:48 modifié dans API AppKit #1
Bonsoir,

je suis désespérément en train d'essayer de reproduire une chose simple en C : créer,et remplir un document.txt

en C : il suffit de faire FILE* = fopen(fichier , "blabla.txt","w")
puis on enchaine avec des printf et scanf pour jouer avec le fichier...

je voudrai faire pareil en Obj-C (avant de poster j'ai fouiner partout,essayer de comprendre,suivi des tutos mais ça ne marche toujours pas)

voici mon code :

char phrase1&#91;] = &quot;ceci est la phrase 1&quot;;<br />		NSMutableData *data = [NSData dataWithBytes:phrase1 length:20];<br />		NSURL *url = [NSURL fileURLWithPath:chemin_fichier]; <br />		NSError *fileError = nil;<br />		[data writeToURL:url options:0 error:&amp;fileError];<br />		<br />		char phrase2&#91;] = &quot;voila la phrase 2&quot;;<br />		<br />		NSData *data2 = [NSData dataWithBytes:phrase2 length:17];<br />		[data appendData:data2];<br />		<br />	}<br />


le résultat : j'ouvre mon fichier .txt (créer avec chemin_fichier) et il contient uniquement la phrase 1  :'(

Merci de m'indiquer si c'est la bonne classe,si j'ai pas fait d'erreur bête de débutant...
et quelle est la méthode qui correspond à  un fprintf() ?

Réponses

  • AliGatorAliGator Membre, Modérateur
    juillet 2010 modifié #2
    Bah non ton code est bon c'est parfait, t'as tout fait bien.
    Tu voudrais qu'il fasse quoi de plus ?

    Ah tu voudrais qu'il t'écrive la phrase2, donc data2, dans ton fichier ? Ah mais pour ça faut p'tet lui demander :P :)
    Tu n'as fait writeToURL:options:error: qu'une seule fois, pour écrire le contenu du premier "data", normal donc qu'il ne t'air écrit que le premier data ;-)
    Déplace ton writeToURL:options:error: à  la fin de ton code, pour qu'il écrire le data après que tu as fait le "appendData" et donc seulement une fois que data contient à  la fois phrase1 et phrase2.



    Sinon les méthodes writeToFile: etc sont pratiques pour écrire directement un bloc de NSData dans un fichier. Mais si tu veux écrire séquentiellement, par petits bouts, dans un fichier, tu peux utiliser des API plus fines (un peu plus bas niveau disons) : cf le Programming Guide associé.

    En particulier l'utilisation de NSFileHandle est bien plus proche de ce que tu ferais en C avec FILE*, fopen, fwrite (ou fprintf) et fclose, là  où NSData et writeToURL: sont plus haut niveau (et plutôt orientées archivage/sérialisation).
  • prepa75prepa75 Membre
    14:48 modifié #3
    Merci bien Ali de ta réponse,  NSFileHandle correspond tout à  fait à  ce que je veux faire (en lisant les méthodes en diagonales  :P )

    je suis content de moi , même si j'ai passé 4H devant les différentes docs j'ai réussi a utiliser intelligemment celle d'Apple  :p :p c'est ma tournée...

    sinon j'ai essayer ce que tu m'as dit :
    <br />char phrase1&#91;] = &quot;ceci est la phrase 1&quot;;<br />		NSMutableData *data = [NSData dataWithBytes:phrase1 length:20];<br />		NSURL *url = [NSURL fileURLWithPath:chemin_fichier];<br />		NSError *fileError = nil;<br />		<br />		/*[data writeToURL:url options:0 error:&amp;fileError]; */ <br />		<br />		char phrase2&#91;] = &quot;voila la phrase 2&quot;;<br />		<br />		NSData *data2 = [NSData dataWithBytes:phrase2 length:17];<br />		[data appendData:data2];<br />		<br />		[data writeToURL:url options:0 error:&amp;fileError];<br />
    


    et j'ai droit à  cette belle erreur (avec le fichier qui contient que la 1ere phrase...) :

    2010-07-04 22:43:05.008 Nombre Premier Multi-Thread[33498:a0f] -[NSConcreteData appendData:]: unrecognized selector sent to instance 0x10017a5a0<br />2010-07-04 22:43:05.059 Nombre Premier Multi-Thread[33498:a0f] -[NSConcreteData appendData:]: unrecognized selector sent to instance 0x10017a5a0<br />kill<br />quit<br />
    


  • AliGatorAliGator Membre, Modérateur
    14:48 modifié #4
    Oui exact c'est normal, parce qu'il faut que tu utilises des NSMutableData et pas des NSData
    C'est ce que tu fais tu vas me dire, puisque tu as déclaré data et data2 comme NSMutableData ?

    Eh bien perdu, car même si elles sont déclarées comme ça, ce sont des NSData que tu mets dans ces variables, puisque tu appelles dataWithBytes:length: sur NSData et pas NSMutableData !
  • prepa75prepa75 Membre
    juillet 2010 modifié #5
    Yahou me voici rentré de Paris maintenant je peut me consacrer à  Xcode sans avoir ma conscience qui fait la tête  :p :p

    j'ai compris la subtilité Ali je dois donc utiliser
    NSMutableData *data = [NSMutableData dataWithBytes:phrase1 length:20];
    
      erreur d'inatention  :P

    2eme question : j'essaye d'écrire dans un Filehandle mais c'est malheuresement sans succés...

    voici mon code :
    NSFileHandle *filehandle;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [filehandle initWithFileDescriptor:0];&nbsp;  //on initialise le fichier mais...<br />		filehandle = [NSFileHandle fileHandleForUpdatingAtPath:chemin_fichier];	//pour écrire et lire dans le fichier	<br />		<br />		char phrase1&#91;] = &quot;ceci est la phrase 1&#092;n&quot;;<br />		NSData *data = [NSData dataWithBytes:phrase1 length:20];<br />		[filehandle writeData:data];
    


    il y a une erreur pour (int)fileDescriptor j'ai mis 0 par pur hasard car je ne sais pas ce que l'on doit mettre, comment la description d'un fichier peut être un int ? je n'ai pas trouvé d'information sur ce fileDescriptor...
  • prepa75prepa75 Membre
    14:48 modifié #6
    la seule info que j'ai trouvée our la création d'un file Handle Object c'est ça :  :'(

    Creating a File Handle Object

    NSFileHandle is a class clusters, file handle objects are not actual instances of the NSFileHandle class but of one of its private subclasses. Although a file handle object's class is private, its interface is public, as declared by the abstract superclass NSFileHandle.

    Generally, you instantiate a file handle object by sending one of the fileHandle... messages to the NSFileHandle class object. These methods return a file handle object pointing to the appropriate file or communications channel. As a convenience, NSFileHandle provides class methods that create objects representing files and devices in the file system and that return objects representing the standard input, standard output, and standard error devices. You can also create file handle objects from file descriptors (such as found on BSD systems) using the initWithFileDescriptor: and initWithFileDescriptor:closeOnDealloc: methods. If you create file handle objects with these methods, you “own” the represented descriptor and are responsible for removing it from system tables, usually by sending the file handle object a closeFile message.

  • CéroceCéroce Membre, Modérateur
    14:48 modifié #7
    NSFileHandle est une classe de bas niveau.
    Le file descriptor est un numéro qui est renvoyé lorsqu'un ouvre un fichier. C'est utile si tu accèdes directement au système de fichier via POSIX.

    À vrai dire, je n'ai jamais eu besoin d'utiliser NSFileHandle, NSFileManager répond à  90 % des besoins. Cependant, les méthodes +fileHandleForWritingAtPath: et cie te conviendront mieux.
  • AliGatorAliGator Membre, Modérateur
    14:48 modifié #8
    Oui et d'ailleurs tu peux totalement enlever ta ligne "initWithFileDescriptor" qui non seulement ne sert à  rien, puisque tu utilises ensuite le constructeur de commodité "fileHandleForUpdatingAtPath:" juste après (et ça, c'est bien ce qu'il faut faire, pour créer un nouvel objet NSFileHandle), mais en plus risque de te provoquer des problèmes.
    En effet tu appelles [tt][filehandle initWithFileDescriptor:0][/tt] mais depuis quand on appelles "init" sans appeler "alloc" avant ? Tu appelles une méthode d'instance sur une instance... pas initialisée (et même pas mise à  nil lorsque tu déclares ta variable, donc elle peut pointer n'importe où dans la mémoire et dans ce cas plantages assurés)...

    Donc soit tu fais alloc/init, soit tu utilises un constructeur de commodité, mais pas init tout seul sans avoir fait le alloc ! Quant au File Descriptor, oui c'est un entier, ça vient de la base POSIX sur laquelle se base NSFileHandle comme indiqué par Céroce (plus d'infos sur wikipedia par exemple), mais dans ton cas tu n'as aucun besoin d'utiliser ça puisque tu ne souhaites pas initialiser ton NSFileHandle à  partir d'un FileDescriptor qui t'aurait été retourné par un appel à  une fonction système POSIX, donc c'est bien le constructeur de commodité que tu utilises en 2e ligne qu'il faut utiliser à  la place.
  • prepa75prepa75 Membre
    14:48 modifié #9
    Ah ok j'ai compris  :P mais lorsque j'utilise la 2eme methode,le fichier ne se crée pas à  l'emplacement indiqué,et à  aucun autre endroit d'ailleur  :( est-ce normal ou alors il faut ecrire dans le fichier pour qu'il aparaisse ? Ce qui m'étonnerai quand meme...
  • CéroceCéroce Membre, Modérateur
    juillet 2010 modifié #10
    Fais attention au chemin d'accès, le mieux est de l'obtenir grâce aux dialogues de choix de fichiers standard (NSOpenPanel / NSSavePanel), on ne peut pas écrire n'importe où, et "toto.txt" n'est pas un bon chemin !

    Autrement, le système de fichiers possède des systèmes de caches, alors il n'est sûrement pas nécessaire d'écrire dans le fichier, mais le fermer, peut-être que oui.
  • AliGatorAliGator Membre, Modérateur
    14:48 modifié #11
    dans 1278676615:

    Ah ok j'ai compris  :P mais lorsque j'utilise la 2eme methode,le fichier ne se crée pas à  l'emplacement indiqué,et à  aucun autre endroit d'ailleur  :( est-ce normal ou alors il faut ecrire dans le fichier pour qu'il aparaisse ? Ce qui m'étonnerai quand meme...
    Heu bah non, c'est normal, c'est bien ce que tu décris.
    Il n'a pas de raison de créer le fichier si tu ne lui as rien demandé d'écrire (même pas du vide), tu ne lui a pas demandé de créer de fichier, mais de créer un objet de type "FileHandle" (un "manipulateur de fichiers" si tu veux).

    Tu peux créer une instance de NSFileHandle pour lire ou écrire un fichier, dans tous les cas instancier l'objet NSFileHandle ne crée en rien le fichier. Une fois que tu as le NSFileHandle, donc ce manipulateur de fichiers on va dire, tu peux appeler des méthodes dessus, soit pour créer le fichier correspondant, ou pour écrire sur le disque dans le fichier (ce qui va le créer s'il n'existe pas), etc.

    PS : Et bonnes remarques de Céroce également sur les chemins et la fermeture du FileHandle
  • prepa75prepa75 Membre
    14:48 modifié #12
    dans 1278678948:

    Fais attention au chemin d'accès, le mieux est de l'obtenir grâce aux dialogues de choix de fichiers standard (NSOpenPanel / NSSavePanel), on ne peut pas écrire n'importe où, et "toto.txt" n'est pas un bon chemin !


    Voici mon code pour obtenir le chemin choisi par l'utilisateur :
    - (void)chooseDirectoryPanelDidEnd:(NSOpenPanel *)openPanel		//lancé au @selector du SavePanel<br />						returnCode:(int)returnCode<br />					&nbsp;  contextInfo:(void *)contextInfo<br />{<br />	if (returnCode == NSOKButton)		//en cliquant sur ok...<br />	{<br />		NSString *chemin_fichier = [[openPanel filenames] objectAtIndex:0];		// récupération du chemin du fichier<br />		chemin_fichier = [chemin_fichier stringByAppendingString:@&quot;.txt&quot;];		//on rajoute l&#39;extension .txt<br />		<br />		[commentaire_textfield setStringValue:[NSString stringWithFormat:@&quot;fichier : %@&quot;, chemin_fichier]];	// affichage du chemin
    


    il n'y a pas de souci il marche nikel lorsque j'utilise les NSMutableData donc si j'ai bien compris je doit utiliser un – writeData: pour créer le fichier automatiquement c'est ça ? ce qui va nous donner :
    NSFileHandle *filehandle;<br />		<br />		filehandle = [NSFileHandle fileHandleForUpdatingAtPath:chemin_fichier];		<br />		<br />		<br />		char phrase1&#91;] = &quot;ceci est la phrase 1&#092;n&quot;;<br />		NSMutableData *data = [NSMutableData dataWithBytes:phrase1 length:20];<br />		<br />		[filehandle writeData:data];
    


    aurais-je oublier quelque chose ? la NSString chemin_fichier est par exemple : /Users/prepa75/Deskop/test.txt

  • AliGatorAliGator Membre, Modérateur
    14:48 modifié #13
    Oui, un closeFile sur ton fileHandle (ou au minimum un synchronizeFile pour forcer le flush, mais c'est mieux d'attendre de fermer le fichier avec closeFile plutôt que de forcer la synchronisation).

    Tant que tu ne fermes pas ton fichier (ou ne force pas la synchronisation) il ne fera pas l'écriture, car l'écriture est bufferisée pour éviter les accès continus au disque au risque de plomber les perfs.
  • prepa75prepa75 Membre
    14:48 modifié #14
    euh pourquoi ça ne marche toujours pas ?  B)
    NSFileHandle *filehandle;<br />		<br />		filehandle = [NSFileHandle fileHandleForUpdatingAtPath:chemin_fichier];		<br />		[filehandle closeFile];<br />		<br />		char phrase1&#91;] = &quot;ceci est la phrase 1&#092;n&quot;;<br />		NSMutableData *data = [NSMutableData dataWithBytes:phrase1 length:20];<br />		<br />		[filehandle writeData:data];
    


    pourtant c'est tout bon non ? je déclare, je ferme, je crée le *data et je l'écrit dans le dit fichier qui n'apparait pas sur le bureau GRRR  >:(


  • prepa75prepa75 Membre
    14:48 modifié #15
    en fouinant sur le forum une nouvelle fois j'ai trouvé ce topic : [ftp=ftp://pommedev.mediabox.fr/index.php?topic=1489.msg15338#msg15338]http://pommedev.mediabox.fr/index.php?topic=1489.msg15338#msg15338[/ftp]

    et le closefile il faut le mettre à  la fin non (ce qui est déja beaucoup plus logique  :P )
    NSFileHandle *filehandle;<br />		filehandle = [NSFileHandle fileHandleForWritingAtPath:chemin_fichier];		<br />&nbsp; <br />		char phrase1&#91;] = &quot;ceci est la phrase 1&#092;n&quot;;<br />		NSMutableData *data = [NSMutableData dataWithBytes:phrase1 length:20];<br />		<br />		[filehandle writeData:data];<br />		[filehandle closeFile];
    


    Hélas le fichier n'apparait pas à  l'emplacement choisi...

  • prepa75prepa75 Membre
    14:48 modifié #16
    Bon La classe NSFileHandle est vraiment pas faite pour moi  :'(
    j'ai beau essayer tout les trucs qui trainent sur internet ça ne marche pas  >:(

    voici donc ce que j'ai fait (oui je sais c'est un peu triché mais la je suis vraiment bloqué  :P )
    char chemin_char[300];<br />		[chemin_fichier getCString:chemin_char];<br />		<br />		FILE *fichier;<br />		fichier = fopen(chemin_char, &quot;w&quot;);<br />		<br />		if (fichier == nil)<br />		{printf(&quot;marche pas&quot;);}<br />		else {printf(&quot;fichier crée...&quot;);}
    


    et j'ai un beau fichier qui s'est crée sur mon bureau 
  • ChachaChacha Membre
    14:48 modifié #17
    dans 1278711797:

    Bon La classe NSFileHandle est vraiment pas faite pour moi  :'(


    En soi, ce n'est pas mal d'utiliser FILE* : après tout, Objective-C n'est qu'un sur-ensemble du C.
    Par contre, il est dommage de se priver d'outils qui permettent de rendre les choses plus fiables.
    chemin_char[300] : tu te prives des chemins de plus de 300 caractères
    getCString : tu te prives des caractères UTF8
    fopen() : en cas d'échec, le diagnostic est plus difficile à  faire
    printf(...) tu te prives des outils Cocoa pour former les chaà®nes de caractères.

    Franchement, tu devrais profiter de n'avoir pas de grosses contraintes de développement pour te familiariser avec des morceaux de Cocoa que tu ne maà®trises pas. C'est l'occasion de s'enrichir !
  • prepa75prepa75 Membre
    14:48 modifié #18
    Je suis tout a fait daccord avec toi chacha,mais je ne la comprend pas du tout  :'( je ne la trouve pas logique en fait et je sais que dans ce cas la c'est moi qui ne le suis pas car plein de developpeurs l'utilisent sans raler  ;)

    j'y reviendrai dessus dans quelques mois lorsque j'aurai mieux compris certaines choses,pour le moment je suis sur la NSThread que j'avais mis de coté et maintenant avec un ptit tuto clair que j'ai trouvé je pense être capable de m'en sortir tout seul.ça fera surement pareil avec la NSFileHandle 
  • laudemalaudema Membre
    14:48 modifié #19
    Ce que tu fais en C peut être fait en Objective C, que ce soit pour les threads ou les descripteurs de fichier.
    Ze m'esplik :
    Quand tu écris (en C)
    FILE *fichier;<br />		fichier = fopen(chemin_char, &quot;w&quot;);<br />		<br />		if (fichier == nil)
    

    Avec Cocoa tu écris
    <br />NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:chemin_fichier]<br />if (fileHandle == nil)<br />&nbsp; &nbsp; printf(&quot;marche po&#092;n&quot;);<br />else<br />&nbsp; &nbsp; printf(&quot;Youpie&#092;n&quot;);<br />
    

    Sinon tu vas te retrouver à  envoyer des messages à  nil, ce qui n'est pas interdit mais ne fait rien du tout....
    En fait je suis un peu perturbé par ton chemin_fichier qui sort d'une methode qui contient chooseDirectory, parce que si c'est un répertoire je ne suis pas certain que mettre un .txt au bout te donne un chemin valide.
    Tu peux vérifier si ton fichier est là  avec
    <br />if ([[NSFileManager defaultManager]fileExistsAtPath:chemin_fichier])<br />&nbsp; &nbsp; NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:chemin_fichier]<br />else<br />&nbsp; &nbsp; printf(&quot;Pas de fichier ?&#092;n&quot;<br />if (! fileHandle)<br />&nbsp; &nbsp; printf(&quot;Pas de descripteur &#092;n&quot;<br />
    
  • prepa75prepa75 Membre
    14:48 modifié #20
    Merci de ta réponse laudema 

    voici le code que j'ai compilé :
    NSString *chemin_fichier = [[openPanel filenames] objectAtIndex:0];		// récupération du chemin du fichier<br />fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:chemin_fichier];<br />		if (fileHandle == nil)<br />		{<br />			printf(&quot;marche po&quot;);<br />		}<br />		else<br />		{<br />			printf(&quot;Youpie&quot;);<br />		}<br />		<br />		if ([[NSFileManager defaultManager]fileExistsAtPath:chemin_fichier]){<br />			fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:chemin_fichier];}<br />						else<br />			{printf(&quot;Pas de fichier ?&#092;n&quot;);}<br />					&nbsp;  if (! fileHandle)<br />			{printf(&quot;Pas de descripteur &#092;n&quot;);}<br /><br />
    


    comme tu l'as dit j'ai enlever l'ajout du .txt ce qui est bizarre c'est que le chemin est valide lorsque je le transphorme en char mais ne l'est pas lorsque je le laisse en une NSString  :)

    2eme chose bizarre quand je me battait pour faire apparaitre le fichier, *fileHandle n'était pas nil et pourtant le fichier n'aparaissait pas à  son emplacement désiré...

    en fait je met un chooseDirectory car une fenetre s'ouvre et l'utilisateur rentre le nom du fichier à  créer ainsi que son emplacement.c'est bien la bonne méthode non ? il faut qu'il choisisse un dossier qui contiendra le fichier.
  • laudemalaudema Membre
    juillet 2010 modifié #21
    Reprenons de zéro (ou presque) Tu cherches à  créer un fichier dans un répertoire puis lui ajouter du texte. Si le fichier existe déjà  tu lui ajoutes le texte ...
    <br />	NSFileManager *df = [NSFileManager defaultManager];<br />	NSError *e;<br />	NSString *chemin_fichier;<br />	NSOpenPanel *op = [NSOpenPanel openPanel];<br />	[op setCanChooseDirectories:YES];<br />	[op setCanChooseFiles:NO];<br />	NSInteger result = [op runModal];<br />	if ( result == NSFileHandlingPanelOKButton){<br />		NSString *dirPath = [[op filenames]lastObject];<br />			chemin_fichier = [[[dirPath stringByStandardizingPath]<br />									 stringByAppendingPathComponent:@&quot;MonBeauFichier&quot;]<br />									stringByAppendingPathExtension:@&quot;txt&quot;];<br />	}<br />	<br />			if ( ! [df fileExistsAtPath:chemin_fichier]) {		<br />			if(![[NSData data]writeToFile:chemin_fichier<br />								&nbsp; options:0<br />									error:&amp;e]){<br />				[NSApp presentError:e];<br />			NSLog(@&quot;Pas pu créer le fichier %@ erreur:%i :%@&#092;nAbandon ...&quot;, chemin_fichier, [e code], [e localizedDescription]);<br />			return;<br />		}<br />			<br />	}<br />	NSFileHandle *fileHandle = [NSFileHandle fileHandleForWritingAtPath:chemin_fichier];<br />	if (! fileHandle){<br />		printf(&quot;Pas su créer le descripteur de fichier&#092;nAbandon&#092;n&quot;);<br />		return;<br />	}<br />	[fileHandle seekToEndOfFile];<br />	char phrase1&#91;] = &quot;ceci est la phrase 1&#092;n&quot;;<br />	[fileHandle writeData:[NSData dataWithBytes:phrase1 length:21]];<br />	char phrase2&#91;] = &quot;ceci est la phrase 2&#092;n&quot;;<br />	[fileHandle writeData:[NSData dataWithBytes:phrase2 length:21]];<br />	NSString *content = [NSString stringWithContentsOfFile:chemin_fichier<br />												&nbsp; encoding:NSUTF8StringEncoding<br />													 error:&amp;e];<br />	printf(&quot;%s&#092;n&quot;,[content UTF8String]);<br />	[fileHandle closeFile];<br />
    

    hth
  • prepa75prepa75 Membre
    14:48 modifié #22
    Bonjour,

    c'est bizarre j'ai plus de temps libre en vacances qu'en prépa  bref me revoici  :P

    Merci laudema pour ta réponse complète, j'ai bien analysé le code et j'ai compris le fonctionnement et le principe pour créer un fichier.
    En fait c'est bon c'est devenu logique dans ma tête c'est bon signe 

    j'ai juste une question : dans ce code la :
    if(![[NSData data]writeToFile:chemin_fichier<br />								&nbsp; options:0<br />									error:&amp;e])
    


    le option:0 sert à  quoi ? quels sont les autres valeurs qui peuvent être utilisées et en quelles circonstances ? parsque j'ai rien trouvé à  ce sujet su la doc.

    encore merci,j'ai tout compris 
  • ChachaChacha Membre
    14:48 modifié #23
    dans 1279178806:

    Bonjour,
    le option:0 sert à  quoi ? quels sont les autres valeurs qui peuvent être utilisées et en quelles circonstances ? parsque j'ai rien trouvé à  ce sujet su la doc.

    C'est pourtant bien indiqué.

    - (BOOL)writeToFile:(NSString *)path options:(NSDataWritingOptions)mask error:(NSError **)errorPtr
    (...)
    mask :
    A mask that specifies options for writing the data. Constant components are described in “NSDataWritingOptions”.
    (...)
    NSDataWritingOptions
    Options for methods used to write NSData objects.
    enum {
      NSDataWritingAtomic = 1UL << 0
      NSAtomicWrite = NSDataWritingAtomic
    };
    NSDataWritingAtomic : A hint to write data to an auxiliary file first and then exchange the files. This option is equivalent to using a write method taking the parameter atomically:YES.
    Available in Mac OS X v10.6 and later.
    Declared in NSData.h.
    NSAtomicWrite
    Deprecated constant. (Deprecated. Use NSDataWritingAtomic instead.)
    Available in Mac OS X v10.4 and later.
    Declared in NSData.h.
  • prepa75prepa75 Membre
    14:48 modifié #24
    En effet je suis passé par là  mais ça ma fait peur  :o

    je crois que je vais sérieusement me mettre à  l'anglais informatique...ça sert... 
  • laudemalaudema Membre
    14:48 modifié #25
    À dire vrai dans cette énum là  j'ai pas compris alors j'ai mis zéro ce qui souvent correspond au choix par défaut !
    enum {<br />&nbsp;  NSDataWritingAtomic = 1UL &lt;&lt; 0<br />&nbsp;  NSAtomicWrite = NSDataWritingAtomic<br />};
    

    J'imagine que ça a à  voir avec l'écriture "atomique" ou pas du fichier mais je ne vois pas comment choisir. D'habitude on a juste une série de chaines qui correspondent aux valeurs numériques en regard et c'est plus lisible qu'un chiffre dont on oublie vite ce qu'il voulait dire.
    Pour traduire l'anglais informatique, en plus du site http://forum.wordreference.com/ qui offre de bonnes traductions et des forums où elles sont débattues, tu as aussi l'option de chercher dans Wikipedia en anglais, souvent il y a un lien pour une page en français..

    PS: sais pas si c''est chez moi seulement mais dans Safari cette page n'arrête pas de "flasher" en fait défile jusqu'en bas puis revient, c'est assez désagréable.

  • prepa75prepa75 Membre
    14:48 modifié #26
    merci pour le lien , je pense l'utiliser souvent 
Connectez-vous ou Inscrivez-vous pour répondre.