# writetofile / stringWithContentsOfFile



## marcelo (1 Avril 2011)

Bonjour je dois tester une méthode qui écrit dans un fichier avec writetofile pour cela d'une part je vérifie la valeur retournée par cette fonction là c'est bon... et d'autre part je veux vérifier ce qui est écrit là j'ai un petit souci voilà comment je procède :

fichier de test :

```
NavSave *navSaveTest;
	navSaveTest = [[NavSave alloc] init];
	
	BOOL resultWriteFile = [navSaveTest saveText:(@"test")];
	BOOL expectedWriteFile = 1;
	
	GHAssertEquals(resultWriteFile, expectedWriteFile,@"We expected %@, but it was %@",resultWriteFile,expectedWriteFile);
		
	NSString *expectedReadFile = @"test";
	NSString *resultReadFile = [NSString stringWithContentsOfFile:[navSaveTest finalFile] encoding:NSUTF8StringEncoding error:nil];
	
	GHAssertEquals(expectedReadFile, resultReadFile,@"We expected %@, but it was %@",expectedReadFile,resultReadFile);
```

fichier d'écriture :

```
- (BOOL)saveText:(NSString *)trame
{	
	BOOL result = 0;
	if (trame == Nil) 
	{
		DLog("erreur de réception");
	}
	else 
	{
		maTrame = [[NSMutableArray alloc] init];
		[maTrame addObject:trame];
		
		path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
		directory = [path objectAtIndex:0];
		file = @"NavSave.txt";
		finalFile = [directory stringByAppendingPathComponent:file];
	
		result = [maTrame writeToFile:finalFile atomically:YES];	
	}
	return result;
}
```

Pour vérifier ce qui est écrit lors de ma lecture du fichier qu'il soit en .plist ou .txt j'obtient du texte superflu étant donné que c'est un objet :

```
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
	<string>test</string>
</array>
</plist>
```
donc le test ne passe pas quelqu'un peut m'aider? merci


----------



## tatouille (1 Avril 2011)

ces functions te guarantissent deja tous les tests d'integrité des donnees, fichier ecetera et ces tests sont bien plus pousses que ce que tu as ecris, donc ton code est inutile lis la doc a propos des erreurs retournées si tu veux appliquer une strategie differente suivant l'erreur.

oui cette function ecrit dans un fichier une representation serialize de ton objet  (c'est un des concepts phare de cocoa xib, preferences, cache, iokit ecetera)

http://en.wikipedia.org/wiki/Marshalling_%28computer_science%29

maintenant si tu veux ecrire des données "binaire" dans un fichier le container que tu dois utiliser est NSData et/ou son compagnon Mutable (stream container dans d'autre language) et tu verras que ton fichier ne contiendra que ta chaine de charactere, si tu prevois d'ecrire et lire en real time et  proteger ce fichier d'etre detruit durant tes operations de lecture et d'ecriture tu peux utiliser une mapped file, ce qui a aussi  pour avantage de ne pas garder le tout en memoire, 

http://en.wikipedia.org/wiki/Memory-mapped_file

en effet, garder un descripteur de fichier ouvert sur certain fichier durant la vie de l'application et souvant une bonne strategie.


----------



## marcelo (5 Avril 2011)

désolé du retard... merci de ta réponse en faite le problème c'est que je suis obligé de passer par ce genre de test pour bien montrer au jury que si j'écrit @"test" je récupère bien sa et si je modifie le texte écrit, le test ne passe plus... par contre pour vérifier si j'ai bien réussi à écrire là j'utilise les retours d'erreurs de la fonction


----------



## marcelo (6 Avril 2011)

bon ba j'ai résolu mon problème... mettre que des NSString et utiliser STAssertEqualObjects() sa marche très bien...


----------



## tatouille (7 Avril 2011)

tu utilises OCUnit, oui en debug avec tous les symbols je ne comprend pas bien ce que tu fais et si tu comprends bien les choses que tu utilises et pourquoi.


----------

