创建固定大小的临时文件
C#创建固定大小的临时文件,通过FileStream类,执行SetLength方法即可瞬间创建固定大小的文件,文件内容被0x00字节填满。如果是其他语言创建,可以利用Seek定位到给定文件长度的最后一个字节写0x00(记得判断给定文件长度为0的情况)。
演示代码和截图如下:
代码直接用csc.exe命令编译即可。
using System; using System.IO; using System.Linq; class Program { /// <summary> /// 创建固定大小的临时文件 /// </summary> /// <param name="fileName">文件名</param> /// <param name="fileSize">文件大小</param> /// <param name="overwrite">允许覆写:可以覆盖掉已经存在的文件</param> public static void CreateFixedSizeFile(string fileName, long fileSize, bool overwrite) { //验证参数 if (string.IsNullOrEmpty(fileName) || new[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar }.Contains( fileName[fileName.Length - 1])) throw new ArgumentException("fileName"); if (fileSize < 0) throw new ArgumentException("fileSize"); //创建目录 string dir = Path.GetDirectoryName(fileName); if (!string.IsNullOrEmpty(dir) && !Directory.Exists(dir)) Directory.CreateDirectory(dir); //创建文件 FileMode fileMode = overwrite ? FileMode.Create : FileMode.CreateNew; FileStream fs = null; try { fs = new FileStream(fileName, fileMode, FileAccess.ReadWrite, FileShare.Read); fs.SetLength(fileSize); //设置文件大小 } catch { if (fs != null) { fs.Close(); File.Delete(fileName); //注意,若由fs.SetLength方法产生了异常,同样会执行删除命令,请慎用overwrite:true参数,或者修改删除文件代码。 } throw; } finally { if (fs != null) fs.Close(); } } static void Main() { while (true) { Console.Write("文件名,大小,覆盖:"); var input = Console.ReadLine(); if(input==null) continue; if (input.ToLower() == "exit") break; var sp = input.Split(','); if(sp.Length!=3) continue; try { CreateFixedSizeFile(sp[0],long.Parse(sp[1]),bool.Parse(sp[2])); Console.WriteLine("创建成功:"+sp[0]); } catch (Exception ex) { Console.WriteLine("错误: "+ex.Message); } } } }