Да. Главные версии добавляют большие, новые опции, могут повредить совместимость или иметь существенно отличающиеся зависимости, и т.д.
, Незначительные выпуски также добавляют опции, но они меньше, иногда упрощенные портированные версии от бета главной версии.
, Если существует третий компонент номера версии, это обычно для важного bugfixes и исправлений безопасности. Если существует больше, это действительно зависит так от продукта, что трудно дать общий ответ.
Просто создайте файл, найдите достаточно большое смещение и запишите один байт:
FileStream fs = new FileStream(@"c:\tmp\huge_dummy_file", FileMode.CreateNew);
fs.Seek(2048L * 1024 * 1024, SeekOrigin.Begin);
fs.WriteByte(0);
fs.Close();
В результате получится файл размером 2 ГБ с в основном непредсказуемым содержимым, что должно быть подходящим для ваших целей.
Почему вы не использовали класс BackgroundWorker
для достижения этой цели, поскольку вы можете передать что угодно в метод ReportProgress
, чтобы указать отчет о состоянии. См. Пример ниже:
private BackgroundWorker bgWorker; public Form1() { InitializeComponent(); bgWorker = new BackgroundWorker(); bgWorker.DoWork += new DoWorkEventHandler(bgWorker_DoWork); bgWorker.ProgressChanged += new ProgressChangedEventHandler(bgWorker_ProgressChanged); bgWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgWorker_RunWorkerCompleted); bgWorker.RunWorkerAsync(); } void bgWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { this.label2.Text = "Done"; } void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { MyStatus myProgressStatus = (MyStatus)e.UserState; this.label2.Text = string.Format("segments write : {0}" + Environment.Newline + "Segments Remain: {1}", myProgressStatus.iWritten, myProgressStatus.iRemaining); } void bgWorker_DoWork(object sender, DoWorkEventArgs e) { long FSS = din.TotalFreeSpace; long segments = FSS / 10000; long last_seg = FSS % 10000; BinaryWriter br = new BinaryWriter(fs); for (long i = 0; i < segments; i++) { br.Write(new byte[10000]); bgWorker.ReportProgress(i.ToString(), new MyStatus(i, ((segments-i) + 1))); } br.Write(new byte[last_seg]); br.Close(); } public class MyStatus{ public int iWritten; public int iRemaining; public MyStatus(int iWrit, int iRem){ this.iWritten = iWrit; this.iRemaining = iRem; } } }
Это черновик ...
Если вас не волнует содержимое, то самый быстрый способ, который я знаю, - это практически мгновенно:
private void CreateDummyFile(string fileName, long length)
{
using (var fileStream = new FileStream(fileName, FileMode.Create, FileAccess.Write, FileShare.None))
{
fileStream.SetLength(length);
}
}
Если вам нужен только FileStream
, вы можете использовать FileStream.SetLength
. Это даст вам поток длиной 2 ГБ. Затем вы можете записать последний байт в произвольную позицию по вашему выбору. Но содержимое будет неопределенным.
Если вы действительно пытаетесь создать файл на диске, да, вам нужно будет записать его содержимое. И да, жесткие диски будут медленными; что-то вроде скорости записи 1 ГБ / мин не совсем смешно. Извините, это физика!
Я могу ошибаться, но вы, вероятно, обнаружите, что невозможно создать файл такого размера так быстро, поскольку в процессе записи ввода-вывода возникнет узкое место.
Однако в вашем код над Applciation.DoEvents будет замедлять работу. Также любая перерисовка screenthis.label2.Text = вызовет небольшое замедление.