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

可能重复:
如何将流保存到文件?

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

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

我如何实际保存单词和PDF?

 //multimedia/ video? 

我看了(可能不够硬)但我找不到任何地方……

对于文件类型,您可以依赖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(); 

如果您使用的是.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); } 

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

那么, 最简单的方法是打开文件流然后使用:

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

但这是相对低效的,因为它涉及复制缓冲区。 它适用于小流,但对于大量数据,您应该考虑使用:

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

对于文件流:

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

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

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

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

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