7
votes

Créer un fichier sans ouvrir / le verrouiller?

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.

Maintenant, je dois:

  • Créez-le
  • Fermer
  • Renommer
  • Réouvoir pour une utilisation

2 commentaires

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 / ...


5 Réponses :


2
votes

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.


0 commentaires



1
votes

Hack incroyablement grotty, probablement le moyen le plus compliqué d'atteindre votre objectif: Utiliser processus classe xxx

où la commande serait echo 2 >> Votrefile.txt


0 commentaires

2
votes

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);
        }
    }
} }


0 commentaires