如何将'dummy-data'写入二进制文件?

时间:2014-01-16 10:39:14

标签: c# binary flush

我在实习期间完成了一项任务,基本上就是这样(在Visual Studio 2013中,一切都是用C#制作的):

  1. 创建新的二进制文件(特定文件夹)
  2. 清空/删除文件(如果已存在)
  3. 标记开始时间(毫秒精度)
  4. 尽快将10 GB的虚拟数据写入文件。 (将数据写为1024字节虚拟数据的块,继续写入10 GB)
  5. 标记结束时间(毫秒精度)
  6. 同花顺并关闭文件
  7. 输出写入所有10 GB数据所花费的时间(结束时间 - 开始时间)
  8. 每秒输出的字节数。
  9. 可能的输入参数必须是:

    • 文件夹
    • 总字节数(例如10GB)
    • 每块字节数(例如1024)

    现在我并没有真正感兴趣的是只是拿到一个代码来执行此操作,因为这不会教会我什么。我有兴趣了解这是如何完成的,理解它,所以我可以自己做。

    请注意,我知道这不是一个去的网站,只是为了让某人做你的作业 - 但也明白我对学习这个很感兴趣,而且我不知道其他地方(除了我的导师,但我不想每20分钟问他一次:P)

    有人可以解释,或者可能会将我重定向到某个地方吗?也许只是给我一个暗示它是如何完成的? 我已经做了大约2周的C#,但我从未写过创建文件等的任何内容。

4 个答案:

答案 0 :(得分:1)

  

创建新的二进制文件(特定文件夹)

     

...

     

刷新并关闭文件

C#使用名为 streams 的概念进行二进制输入/输出。

强制性文献:http://msdn.microsoft.com/en-us/library/k3352a4t(v=vs.110).aspx

这两种技术都在MSDN上进行了演示。

  

清空/删除文件(如果已存在)

实际上,如果希望覆盖它,您只需要检查文件是否存在。

  

标记开始时间(毫秒精度)

     

...

     

标记结束时间(毫秒精度)

     

...

     

输出写入所有10 GB数据所花费的时间(结束时间 - 开始时间)

     

每秒输出的字节数。

查看System.Diagnostics命名空间。

  

尽可能快地将10 GB的虚拟数据写入文件。 (写数据   作为1024字节虚拟数据的块,继续直到10 GB已经   写的)

最后,该计划的内容......


剧透警报!


你必须编写一个循环,在每次迭代时写入1024个字节,直到写入的总字节数达到10GB。

下面是一个代码示例,但没有错误检查(因为它不是必需的)。在现实世界中,您显然会编写处理异常的代码。

using (var fileStream = File.OpenWrite(path))
{
    double fileSize = Math.Pow(10, 10); // 10 GB
    int bufferSize = 1024; // 1KB
    byte[] buffer = new byte[bufferSize]; // Create an array of zero's

    for (int written = 0; written < fileSize; written += bufferSize)
    {
        // Write 1024 bytes (all zero's: 000000000000...0)
        fileStream.Write(
            array: buffer,
            offset: 0,
            count: bufferSize);
    }
    /* Optional inside a "using" block: */ fileStream.Flush();
}

答案 1 :(得分:0)

看看System.IO.File。您想要创建一个文件流(静态File.Create),然后在using子句中,您将使用Stream.Write通过该流写入数据。我不打算添加更多,你可以在MSDN等上找到足够的信息。但如果需要可以随意提出任何问题。

另外,对于挑剔,Mark start-time (millisecond precision)会非常棘手,因为系统日期并不能保证你那种精确度。所以你可以打印出毫秒,但它不会准确到毫秒。有一个专门的类来测量时间间隔,找到并使用它:)

答案 2 :(得分:0)

在写入/创建文件方面,请查看此链接,这将有助于您了解System.IO

http://www.dotnetperls.com/streamreader

在记录流程所用的时间方面,请看一下:

http://www.dotnetperls.com/stopwatch

这将允许您记录(以毫秒为单位)该过程花费的时间。我知道这不会回答你的问题的所有,但它应该有所帮助。

答案 3 :(得分:0)

请查看以下内容以开始使用:

  • System.IO.FileStream
  • System.IO.FileMode
  • System.Random
  • System.Diagnostics.Stopwatch
  • System.TimeSpan