我在实习时得到了一项任务,基本上是这样的(一切都是用C#制作的,在Visual Studio 2013中):
- 创建新的二进制文件(特定文件夹)
- 清空/删除文件(如果已存在)
- 标记开始时间(毫秒精度)
- 尽可能快地将10 GB的伪数据写入文件。(将数据写入1024字节的伪数据块,继续写入,直到写入10 GB为止)
- 标记结束时间(毫秒精度)
- 刷新并关闭文件
- 输出写入所有10 GB数据所花费的时间(结束时间-开始时间)
- 每秒输出的字节数
可能的输入参数必须是:
- 文件夹
- 总字节数(例如10GB)
- 每个区块的字节数(例如1024)
现在,我对仅仅获得一个能做到这一点的代码并不感兴趣,因为这不会教会我什么。我有兴趣学习如何做到这一点,理解它,这样我就可以自己做了。
还请注意,我知道这不是一个可以去的网站,只是为了让别人给你做作业,但我也知道我对学习这个很感兴趣,我不知道还有其他地方(除了我的导师,但我不想每隔20分钟就来问他一次:p)
有人能解释一下,或者把我重定向到某个地方吗?也许只是给我一个提示,它是如何做到的?我已经做C#大约2周了,但我从来没有写过任何创建文件等的东西。
创建新的二进制文件(特定文件夹)
刷新并关闭文件
C#为二进制输入/输出使用了一个名为流的概念。
强制性文献: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();
}
看看System.IO.File
。您想要创建一个文件流(静态File.Create
),然后在using
子句中,您将使用Stream.Write
通过该流写入数据。我不打算添加更多,你可以在MSDN等上找到足够的信息。但如果需要,请随时提出任何问题。
此外,挑剔地说,Mark start-time (millisecond precision)
将是相当棘手的,因为系统日期不能保证你的精度。所以你可以打印出毫秒,但它不会精确到一毫秒。有一个专门的类用于测量时间间隔,找到并使用它:)
查看以下内容即可开始:
- System.IO.FileStream
- System.IO.FileMode
- System.Random
- System.Diagnostics.Stopwatch
- System.TimeSpan