2010-11-19 25 views
1

il semble être un problème rare où je ne suis pas en mesure d'enregistrer les données du fichier texte strpath = "c: \ chemin \ 1234 \ abcd.txt";pas en mesure d'enregistrer les données du fichier texte dans C#

Le fichier est en train d'être crédité mais les données qu'il contient ne sont pas enregistrées.

si je vérifie par octet b La longueur est montre 121.

public int SaveFile(byte[] b,string lstrpath) 
     { 
FileStream fs = new FileStream(strpath,FileMode.Create); 
       fs.Write(b,0,b.Length); 
       fs.Close(); 
       if(File.Exists(strpath)) 
       { 
        return 1; 
       } 
       else 
       { 
        return 0; 
       } 
} 

est quelque chose que je me trompe ici?

+1

Eh bien, que se passe-t-il? Qu'y a-t-il dans le fichier après? –

Répondre

1

Vous ne jetez pas et ne rincez pas le jet. À cause de cela, si une exception se produit, le programme fuira un descripteur de fichier. Essayez ceci:

public void SaveFile(byte[] b,string lstrpath) 
{ 
    File.WriteAllBytes(lstrpath, b); 
} 

qui maintenant défaites genre de l'objet de la méthode SaveFile car il est déjà intégré dans la BCL.

0

Effectuez un vidage() avant la fermeture. C'est fs.Flush();

+0

La fermeture le rincera quand même –

0

Pourrait être un certain nombre de choses, sûrement? Vous ne vérifiez pas si le fichier existe déjà. Vous ne vérifiez pas si le répertoire existe. Vous ne vérifiez pas les autorisations de votre système de fichiers. N'importe lequel d'entre eux pourrait faire échouer.

Aussi, quand vous dites échouer, que voulez-vous dire? Avez-vous une exception? Une erreur? Est-ce que cela renvoie 0 ou 1? Est-ce qu'il échoue silencieusement? Est-ce que le fichier est créé vide?

Vous avez également besoin d'une gestion des erreurs, ce qui aurait le double avantage de vous indiquer où l'erreur se produit et, espérons-le, d'en savoir plus.

0

Les autres réponses sont toutes valides (gestion des exceptions, élimination, ...), vous pouvez même utiliser l'instruction using. J'irais avec Darin Dimitrovs réponse, ce qui rend votre code beaucoup plus simple et plus facile à lire. En ce qui concerne votre question: Comment appelez-vous cette méthode? Cela fonctionne pour moi dans une application console simple:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var text = "abcd"; 
     var encoding = new UTF8Encoding(); 
     var bytes = encoding.GetBytes(text); 
     SaveFile(bytes, @"D:\test.txt"); 
    } 

    public static int SaveFile(byte[] b, string strpath) 
    { 
     FileStream fs = new FileStream(strpath, FileMode.Create); 
     fs.Write(b, 0, b.Length); 
     fs.Close(); 
     if (File.Exists(strpath)) 
     { 
      return 1; 
     } 
     else 
     { 
      return 0; 
     } 
    } 
} 

Avis J'utilise exactement la même méthode. Cela fonctionne pour moi à chaque fois, donc le fichier peut déjà exister. Dans votre cas, vous pourriez ne pas passer une chaîne? Peut-être un problème avec l'encodage?