Cred ca este a 2-a oara când întâlnesc aceasta cerința in decurs de câteva săptămâni.
Se da un stream și o locație unde trebuie salvat, se cere să se salveze conținutul la stream in locația data. Din păcate API-ul de .NET nu ne permite să facem acest lucru doar dintr-un apel.
O soluție propusa este următoarea:
Se da un stream și o locație unde trebuie salvat, se cere să se salveze conținutul la stream in locația data. Din păcate API-ul de .NET nu ne permite să facem acest lucru doar dintr-un apel.
O soluție propusa este următoarea:
        /// <summary>
       /// Save the stream to the given location.
       /// </summary>
       /// <param name="stream">The stream.</param>
       /// <param name="filePath">The file path where is saved.</param>
       /// <param name="blockSize">The size of the buffer(in kB)</param>
       public static void SaveStream(this Stream stream,String filePath,SeekOrigin seekOrigin=SeekOrigin.Begin,int blockSize=1)
       {
           //Set the poinder to the begin of the stream.
           if(stream.CanSeek && seekOrigin==SeekOrigin.Begin)
           {
               stream.Seek(0, SeekOrigin.Begin);
           }
           //Removed the existing file.
           if (File.Exists(CommandLineArguments.Instance.File))
           {
               File.Delete(CommandLineArguments.Instance.File);
           }
           //Save the stream to the given location.
           using (var streamWrite = File.Create(CommandLineArguments.Instance.File))
           {
               byte[] buffer = new byte[1024*blockSize];
               int read;
               while ((read = stream.Read(buffer, 0, buffer.Length)) > 0)
               {
                   streamWrite.Write(buffer, 0, read);
               }
           }
       }
Iar un exemplu de utilizare:Stream stream=...;
stream.Save("d:/a.txt");
In funcție de necesitați acest exemplu se poate extinde. Din păcate nu putem să facem un extension method pe File deoarece este o clasa statica.
Comments
Post a Comment