Est-ce que quelqu'un connaît-il un moyen de créer un fichier (raisonnablement simple) de créer un fichier sans l'ouverture / le verrouillage réellement? En classe de fichier, les méthodes de création de fichiers renvoient toujours un fichier filtream. Ce que je veux faire, c'est créer un fichier, renommez-le (avec fichier.move), puis utilisez-le. p>
Maintenant, je dois: P>
5 Réponses :
Qu'en est-il de l'utilisation de FILE.WRITREALELBYTES code> Méthode? // Summary:
// Creates a new file, writes the specified byte array to the file, and then
// closes the file. If the target file already exists, it is overwritten.
Peut-être que vous pouvez essayer d'utiliser Méthode de fichier.writeAlltext (chaîne, chaîne) a>
avec le nom de fichier et une chaîne vide. p>
crée un nouveau fichier, écrit le
chaîne spécifiée dans le fichier, puis
ferme le fichier. Si le fichier cible
existe déjà, il est écrasé. P>
blockQuote>
using (File.Create(...)) { }
While this will briefly open your file (but close it again right away), the code should look quite unobtrusive.Even if you did some P/Invoke call to a Win32 API function, you would get a file handle. I don't think there's a way to silently create a file without having it open right afterwards.I think the real issue here is why you go about creating your file in the way you've planned. Creating a file in one place simply to move it to another location doesn't seem very efficient. Is there a particular reason for it?
Raison: Stackoverflow.com/questions/2109152/ ...
Utilisez fichier.create (...). Disposer () code> pour un peu moins de bruit de syntaxe.
Hack incroyablement grotty, probablement le moyen le plus compliqué d'atteindre votre objectif:
Utiliser où la commande serait processus code> classe echo 2 >> Votrefile.txt code> p> p> p> p> p> p> P> P>
Un autre moyen est d'utiliser FileStream et de le fermer après la création du fichier. Il ne versera pas le fichier. Le code ressemblera à:
filtream fs = nouveau filtream (filepath, filemode.create); p>
fs.flush (vrai); p>
Fs.Close (); P> BlockQuote>
Vous, juste après cela, vous pouvez le renommer aussi bien ou le déplacer un autre emplacement. P>
ci-dessous est le programme de test pour tester la fonctionnalité. P>
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; namespace FileLocking { class Program { static void Main(string[] args) { string str = @"C:\Test\TestFileLocking.Processing"; FileIOTest obj = new FileIOTest(); obj.CreateFile(str); } } class FileIOTest { internal void CreateFile(string filePath) { try { //File.Create(filePath); FileStream fs = new FileStream(filePath, FileMode.Create); fs.Flush(true); fs.Close(); TryToAccessFile(filePath); } catch (Exception ex) { Console.WriteLine(ex.Message); } } void TryToAccessFile(string filePath) { try { string newFile = Path.ChangeExtension(filePath, ".locked"); File.Move(filePath, newFile); } catch (Exception ex) { Console.WriteLine(ex.Message); } } } }
Par curiosité; Pourquoi avez-vous besoin de créer le fichier sous un nom, juste pour le renommer immédiatement avant de l'utiliser? Pourquoi ne pas simplement créer le fichier sous le nom autre qu'il sera utilisé?
C'est la raison: Stackoverflow.com/questions / 2109152 / ...