使用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中你可以指定文件扩展名。