使用c#将文件(从流)保存到磁盘

时间:2011-02-15 11:02:44

标签: c# .net

  

可能重复:
  How do I save a stream to a file?

我有一个流对象,可能是图像或文件(msword,pdf),我决定以非常不同的方式处理这两种类型,因为我可能想要优化/压缩/调整大小/生成缩略图等。我称之为将图像保存到磁盘的具体方法,代码:

var file = StreamObject;

//if content-type == jpeg, png, bmp do...
    Image _image = Image.FromStream(file);
    _image.Save(path);

//if pdf, word do...

如何实际保存word和pdf文件?

//multimedia/ video?

我看了(可能不够努力),但我找不到任何地方......

6 个答案:

答案 0 :(得分:26)

如果您使用的是.NET 4.0或更高版本,则可以使用此方法:

public static void CopyStream(Stream input, Stream output)
{
    input.CopyTo(output);
}

如果没有,请使用以下内容:

public static void CopyStream(Stream input, Stream output)
{
    byte[] buffer = new byte[8 * 1024];
    int len;
    while ( (len = input.Read(buffer, 0, buffer.Length)) > 0)
    {
        output.Write(buffer, 0, len);
    }    
}

以下是如何使用它:

using (FileStream output = File.OpenWrite(path))
{
    CopyStream(input, output);
}

答案 1 :(得分:18)

对于文件类型,您可以依赖FileExtentions并将其写入磁盘,您可以使用BinaryWriter。或FileStream

示例(假设您已有流):

FileStream fileStream = File.Create(fileFullPath, (int)stream.Length);
// Initialize the bytes array with the stream length and then fill it with data
byte[] bytesInStream = new byte[stream.Length];
stream.Read(bytesInStream, 0, bytesInStream.Length);    
// Use write method to write to the file specified above
fileStream.Write(bytesInStream, 0, bytesInStream.Length);
//Close the filestream
fileStream.Close();

答案 2 :(得分:4)

我必须引用Jon(c#的主人)Skeet:

  

嗯,最简单的方式是   打开文件流然后使用:

     

byte [] data = memoryStream.ToArray();   fileStream.Write(data,0,   data.Length);

     

但效率相对较低,   因为它涉及复制缓冲区。   这对于小流来说很好,但对于   你应该有大量的数据   考虑使用:

     

fileStream.Write(memoryStream.GetBuffer(),   0,memoryStream.Position);

答案 3 :(得分:1)

对于文件流:

//Check if the directory exists
if (!System.IO.Directory.Exists(@"C:\yourDirectory"))
{
    System.IO.Directory.CreateDirectory(@"C:\yourDirectory");
}

//Write the file
using (System.IO.StreamWriter outfile = new System.IO.StreamWriter(@"C:\yourDirectory\yourFile.txt"))
{
    outfile.Write(yourFileAsString);
}

答案 4 :(得分:0)

如果数据已经有效并且已经包含pdf,word或image,那么您可以使用StreamWriter并保存它。

答案 5 :(得分:0)

只需使用简单的文件流即可。

var sr1 = new FileStream(FilePath, FileMode.Create);
                sr1.Write(_UploadFile.File, 0, _UploadFile.File.Length);
                sr1.Close();
                sr1.Dispose();

_UploadFile.File是一个byte [],在FilePath中你可以指定文件扩展名。