begin process at 2010 02 10 06:52:27
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Fichiers / Disque

 > FILESPLITTER, UN UTILITAIRE POUR DECOUPER ET JOINDRE DES FICHIERS.

FILESPLITTER, UN UTILITAIRE POUR DECOUPER ET JOINDRE DES FICHIERS.


 Information sur la source

Note :
8 / 10 - par 1 personne
8,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Fichiers / Disque Source .NET ( DotNet ) Classé sous :fichier, découper, binarywriter, eventhandlers, multithreading Niveau :Initié Date de création :10/12/2004 Date de mise à jour :29/03/2006 18:54:51 Vu / téléchargé :17 943 / 450

Auteur : eRRaTuM

Ecrire un message privé
Commentaire sur cette source (10)
Ajouter un commentaire et/ou une note

 Description

Cliquez pour voir la capture en taille normale
Pou ceux qui connaissent pas l'histoire :
----------------------
Bien, je travaillais simultanément sur mon ordinateur qui est sans port USB ni carte réseau et sur un laptop sans lecteur de CD, et j'ai eu besoin pour le laptop de l'utilitaire FXCop, qui était sur l'ordinateur.
Etant doné que je n'avais qu'une seule disquette à ma portée, la seule manière possible de le faire , etait de le decouper , afin de copier ses parties vers laptop (aucun d'eux n'est relié à l'Internet), et puis fusionner ses parties apres.
Je suis revenu quelques années auparavant, quand j'étais fanatique de Borland C et MS DOS, et j'ai écrit le decoupeur en C, je l'ai essayé une première fois sur un fichier mp3 afin de voir s'il fonctionne vraiment, puis je suis passé à un installateur empacketé (.msi) parce qu'il vérifie l'intégrité de ses donées avant de continuer l'installation.
Finalement j'a décidé de le récrire en CS, avec un petit support du threading.
FileSplitter lit des blocs de 8 ou 16 Kb, ce qui le rendant plus rapide, et plus ergonomique!
----------------

Maintenant TheFileSplitter v2 lit des blocs de 1 à 7 Mo et gere des fichiers de + de 4Go
Il s'execute en multithreading et emet des events (la totale quoi!)

Source

  • //LE nouveau code est un peu long mais il se base quelque peu sur l'ancien
  • while ( FSIn.Position != FSIn.Length )
  • {
  • PreDefinedCacheSize = DefineCache();
  • byte [] buffer = new byte [PreDefinedCacheSize];
  • strNewFileNames = strDirectory+"\\"+intCounter.ToString()+".part";
  • FSout = new FileStream(strNewFileNames,FileMode.Create);
  • BinaryWriter wFSOut = new BinaryWriter(FSout);
  • while ((FSout.Position < lgSize) && (FSIn.Position != FSIn.Length ))
  • {
  • prgbProgress.Value = (int) (( (float) FSIn.Position / (float) FSIn.Length ) * (float) prgbProgress.Maximum);
  • if ( ((FSIn.Length - FSIn.Position) < Math.Min(PreDefinedCacheSize,(int)lgSize)) && (PreDefinedCacheSize > lgSize) )
  • {
  • PreDefinedCacheSize = (int)FSIn.Length - (int)FSIn.Position;
  • rFSIn.Read(buffer,0,PreDefinedCacheSize);
  • wFSOut.Write(buffer);
  • Thread.Sleep(1);
  • }
  • else
  • {
  • if ( PreDefinedCacheSize > lgSize ) PreDefinedCacheSize = (int)lgSize;
  • rFSIn.Read(buffer,0,PreDefinedCacheSize);
  • wFSOut.Write(buffer);
  • Thread.Sleep(1);
  • }
  • }
  • wFSOut.Close();
  • FSout.Close();
  • intCounter++;
  • }
//LE nouveau code est un peu long mais il se base quelque peu sur l'ancien

while ( FSIn.Position != FSIn.Length )
{
	PreDefinedCacheSize = DefineCache();
	byte [] buffer = new byte [PreDefinedCacheSize];
	strNewFileNames = strDirectory+"\\"+intCounter.ToString()+".part";
	FSout = new FileStream(strNewFileNames,FileMode.Create);
	BinaryWriter wFSOut = new BinaryWriter(FSout);
	while ((FSout.Position < lgSize) && (FSIn.Position != FSIn.Length ))
	{
		prgbProgress.Value = (int) (( (float) FSIn.Position / (float) FSIn.Length ) * (float) prgbProgress.Maximum);
		if ( ((FSIn.Length - FSIn.Position) < Math.Min(PreDefinedCacheSize,(int)lgSize)) && (PreDefinedCacheSize > lgSize) )
		{
			PreDefinedCacheSize = (int)FSIn.Length - (int)FSIn.Position;
			rFSIn.Read(buffer,0,PreDefinedCacheSize);
			wFSOut.Write(buffer);
			Thread.Sleep(1);
		}
		else 
		{
			if ( PreDefinedCacheSize > lgSize ) PreDefinedCacheSize = (int)lgSize;
			rFSIn.Read(buffer,0,PreDefinedCacheSize);
			wFSOut.Write(buffer);
			Thread.Sleep(1);
		}
	}
	wFSOut.Close();
	FSout.Close();
	intCounter++;
}

 Conclusion

Vivement vos commentaires et la v3

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

10 décembre 2004 13:42:47 :
j'ai juste oublié de specifié que FileSplitter lit des blocs de 8 ou 16 Kb, ce qui le rendant plus rapide, et plus ergonomique!
29 mars 2006 18:54:52 :
avec les events et les threads ça devient plus rapide...

 Sources du même auteur

Source avec Zip Source avec une capture Source .NET (Dotnet) GMAILNOTIFIER LIKE CONTROL
Source avec Zip Source avec une capture Source .NET (Dotnet) PROGRESSPIE - UNE ALTERNATIVE POUR LA PROGRESSBAR

 Sources de la même categorie

Source avec Zip PILOTER WORD VIA MICROSOFT.OFFICE.INTEROP.WORD par whismeril
Source avec Zip PILOTER EXCEL VIA MICROSOFT.OFFICE.INTEROP.EXCEL par whismeril
Source avec Zip Source .NET (Dotnet) CHECK IDENTICAL FILES par eldim
Source avec Zip Source avec une capture Source .NET (Dotnet) RICHTEXTBOX NUMÉROTÉ (NUMÉROS DE LIGNES) par jray
Source avec Zip Source avec une capture SURVEILLER FICHIERS CRÉÉS AVEC FILESYSTEMWATCHER AMÉLIORÉ par TheOnlyMaX

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture Source .NET (Dotnet) NOTIFICATIONS DANS UN DELEGATE ASYNCHRONE par olivieram2
Source avec Zip Source avec une capture Source .NET (Dotnet) RECHERCHE ET GESTION DE FICHIERS PERSONNALISÉES par JeremyLecouvert
Source .NET (Dotnet) GREP POUR WINDOWS par Warny
Source avec Zip Source .NET (Dotnet) CHECK IDENTICAL FILES par eldim
Source avec Zip Source avec une capture Source .NET (Dotnet) DECOUPER LES FICHIERS - ACCESS BINAIRE par yous

Commentaires et avis

Commentaire de crazyjoke le 25/12/2004 13:53:02

Le code source (celui présent sur le site) est clair et bien pensé : je ne connais presque pas le C# et j'ai tout compris, bravo.

Je ne comprnd pas cependant la ligne :
byte [] buffer = new byte [PreDefinedCacheSize];

J'ai fait un peu de C et j'aurais mis :
byte buffer [PreDefinedCacheSize];

J'ai sûrement faux mais bon si tu pouvais m'expliquer ce serait sympa.
Merci

8/10

Commentaire de Patrice99 le 04/01/2006 17:21:34

Bravo pour ton logiciel : il semble bien être le seul sur CodesSources à fonctionner sur les gros fichiers, ce qui quand même l'objectif pour ce logiciel !

Tu es sûr que tu as besoin de la ligne Thread.Sleep(1); ?
Ca rame quand même beaucoup, tu devrais aussi précalculer FSIn * prgbProgress.Maximum à l'avance pour gagner du temps.

Commentaire de Willi le 15/01/2006 13:44:51 administrateur CS

Est-ce que le découpage des fichiers de taille supérieur à 2 Go fonctionne ??

Commentaire de Patrice99 le 15/01/2006 14:27:52

Absolument ! j'ai découpé un fichier de 5 Go et recollé sans erreur du premier coup. Par contre, il faut enlever le Sleep à mon avis.

Commentaire de Willi le 15/01/2006 21:06:40 administrateur CS

Re,
Je viens de le tester, c'est relativement long pour découper un fichier de 700Mo il me faut pratiquement 10 minutes.
Est-ce que vous obtenez approximativement les mêmes temps ?

Commentaire de BruNews le 15/01/2006 21:58:39 administrateur CS

Si c'est réellement 10 minutes alors "relativement" est un doux euphémisime, c'est carrément rédhibitoire.

Commentaire de Willi le 15/01/2006 22:43:24 administrateur CS

Oui c'est réellement 10 minutes,
Mais sa vient peut etre du framework 1.1 j'ai fais une classe de découpage de fichiers et sa ne prend pas plus de 45 secondes pour 700Mo utilisé avec la version 2.0 du framework.
Ma méthode n'est pas du tout la meme mais j'utilise le meme nombre de boucle ansi que les mêmes classes FileStream BinaryReader et BinaryWriter.
Etrange test fait sur plusieurs pc

Commentaire de Alain Proviste le 16/01/2006 10:40:53 administrateur CS

willi il serait bienvenue que tu publies cette classe, qu'on puisse nous même comparer :)

Commentaire de eRRaTuM le 30/03/2006 13:12:48

Avec la v2 The FileSplitter fait jusqu'à 15 Mo/s, eh oui :)

Commentaire de Bidou le 17/02/2007 11:37:12 administrateur CS

Je me suis permis de faire une version un peu améliorer de ton programme :
http://www.csharpfr.com/code.aspx?ID=41506

Environ 15% plus rapide, 700Mo découpés par tranche 100Mo en environ 30sec avec un buffer de 4Mo.

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

[C#] CopyTo => Pb de copy [ par adrien78 ] J' ai absolument besoins de récréer la fonction CopyTo en C#=&gt; Cependant j' ai deux pb : - Le fichier copié ne peut pas être lu (érreur de cop ouvrir fichier [ par FaustVII ] je souhaiterai ouvrir un fichier a partir de mon programme (par exemple avec un bouton)j ai tenter d' utiliser file.open mais sans successi quelqu un Executer.... [ par CracK ] Je cherche à associer à un bouton par exemple la fonction qui me permetterai d'executer un fichier txt, mpg ou autres .... private void button1_Click [C#] Nom de fichier dans un textBox [ par jeffwow ] Donc, j'ouvre un fichier avec OpenFileDailog... jusque là ça va. Ensuite, je voudrais prendre le nom de ce fichier et l'envoyer dans un textBox. tex affichier le name d'un fichier dans un label [ par testicool ] ki peux me donner une fonction csharp qui me renvoie le nom d'un fichier que j'ai ouvert(System.IO.Stream strInput = openFileDialog1.OpenFile();...... *?!$... de ressources [ par Xaviou ] 'Lu à tous.J'ai un problème avec les ressources.Je voudrais compiler quelques icones avec mon éxécutable, afin de pouvoir les réutiliser lors de l'éxé compression de fichier [ par eryk17 ] bjrje cherche un script qui me permettrait de compresser un fichiermerci acces fichier [ par bloos ] salut a tous,je voudrais savoir comment fait-on pour lire un caractère saisi situé dans un fichier .Merci pour votre aide Problème d'Upload de fichier Image [ par pchanet ] Bonjour à tous,J'ai un problème avec le code de téléchargement d'une image. Lorsque j'active le téléchargement, une erreur s'affiche :-&gt;&gt; "La ré fonction pour renomer un fichier [ par neopascal ] Je voudrais créer une fonction qui permettra de changer de nom à un fichier grace a une interface graphique qui contient une zone de saisi s'apellant


Nos sponsors


Sondage...

Comparez les prix


HTC Hero

Entre 550€ et 550€

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales