2017-08-24 1 views
1

Je crée plusieurs fichiers à l'aide StreamWriter, je veux que ces fichiers soient créés dans un répertoire spécifiqueChanger l'ancien chemin de chemin personnalisé gardant le nom de fichier et de créer un fichier en utilisant l'écrivain stream en C#

StreamWriter w = new StreamWriter(File.Create(name + ".txt")); 
w.WriteLine(name); 
w.Close(); 

ici name est variable qui est utilisée comme nom de fichier et aussi pour être écrite dans ce fichier, mais mon problème est que je veux que ce fichier soit créé dans un répertoire spécifique.

Répondre

1
 FileStream fileStream = null; 
     StreamWriter writer = null; 
     try 
     { 

      string folderPath = @"D:\SpecificDirecory\"; 
      string path = Path.Combine(folderPath , "fileName.txt"); 

      if (!Directory.Exists(folderPath)) 
      { 
       Directory.CreateDirectory(folderPath); 
      } 

      fileStream = new FileStream(@path, FileMode.Create); 
      writer = new StreamWriter(fileStream); 
      writer.Write(fileBuilder.ToString());    
     } 
     catch (Exception ex) 
     { 
      throw ex; 
     } 
     finally 
     { 
      writer.Close(); 
      fileStream.Close(); 
     } 
3

Vous pouvez inclure le chemin trop:

string path = "C:\\SomeFolder\\"; 
File.Create(path + name + ".txt"); 

Ou Utilisez Path.Combine comme:

File.Create(Path.Combine(path, name + ".txt")); 
+0

J'ai essayé mais j'ai eu une erreur "le format du chemin n'est pas correct" –

+0

pourriez-vous s'il vous plaît montrer exactement ce que vous avez essayé? –

+0

chaîne ww = (@ "U: \ scripts \"); StreamWriter w = nouveau StreamWriter (File.Create (ww + name + ".txt")); w.WriteLine (nom); w.Fermer(); –

1

Vous pouvez déclarer une path pour votre répertoire comme ceci:

string path = @"c:\folder\....";

Puis avec le comm suivant et:

File.Create(path + name + ".txt");

Vous obtiendrez ce que vous voulez

4

Utilisez Path.Combine

Path.Combine utilise le Path.PathSeparator et il vérifie si le premier chemin a déjà un séparateur à la fin il ne répétera pas les séparateurs. De plus, il vérifie si les éléments de chemin à combiner ont des caractères invalides.

Quoted de cette SO post

Il serait également fructueuse pour vérifier si vous name la variable contient des caractères invalides pour un nom de fichier.

Vous pouvez d'abord supprimer des caractères non valides de name variables en utilisant la méthode Path.GetInvalidFileNameChars:

var invalidChars = Path.GetInvalidFileNameChars(); 
string invalidCharsRemoved = new string(name 
    .Where(x => !invalidChars.Contains(x)) 
    .ToArray()); 

Quoted de cette SO post

string directory = "c:\\temp"; 

Au lieu de

File.Create(name + ".txt") 

utilisation

string filename = invalidCharsRemoved + ".txt" 
File.Create(Path.Combine(directory , filename)) 
+0

J'ai une erreur sur invalidChars –

+0

Quel est le message d'erreur? – Winnie

+0

vérifiez maintenant, j'ai édité ma réponse. – Winnie

2

name contient quelque chose comme @"U:\TDScripts\acchf122_0023"

ok selon les nouvelles informations de votre commentaire, vous avez réellement besoin de se débarrasser de l'ancien chemin et le répertoire.

Vous pouvez utiliser la méthode Path.GetFileNameWithoutExtension pour y parvenir. Après cela, vous pouvez utiliser Path.Combine pour créer votre propre chemin.

Voici un exemple pour démontrer:

string myDirectory = @"C:\temp"; 

string oldPathWithName = @"U:\TDScripts\acchf122_0023"; 

string onlyFileName = Path.GetFileNameWithoutExtension(oldPathWithName); 

string myNewPath = Path.Combine(myDirectory, onlyFileName + ".txt"); 

Console.WriteLine(myNewPath); 

J'espère que cela résout votre problème.