C# 我怎么写';虚拟数据';转换成二进制文件?
我在实习期间得到了一份任务,基本上是这样的(一切都是用C#在Visual Studio 2013中制作的):C# 我怎么写';虚拟数据';转换成二进制文件?,c#,binary,flush,C#,Binary,Flush,我在实习期间得到了一份任务,基本上是这样的(一切都是用C#在Visual Studio 2013中制作的): 创建新的二进制文件(特定文件夹) 清空/删除文件(如果已存在) 标记开始时间(毫秒精度) 尽可能快地将10 GB的虚拟数据写入文件。 (将数据写入1024字节的伪数据块,直到写入10 GB) 标记结束时间(毫秒精度) 刷新并关闭文件 输出写入所有10 GB数据所需的时间(结束时间-开始时间) 每秒输出的字节数 可能的输入参数必须为: 文件夹 总字节数(例如10GB) 每个块的字节数(例
- 文件夹
- 总字节数(例如10GB)
- 每个块的字节数(例如1024)
我已经做了2个星期的C,但是我从来没有写过任何创建文件的东西。看看
System.IO.File
。您希望创建一个文件流(静态文件.create
),然后在using
子句中,您将使用stream.write通过该流写入数据。我不打算补充更多,你可以找到足够的MSDN等信息,但如果需要,请随时提问
另外,为了挑剔,标记开始时间(毫秒精度)
将是相当棘手的,因为系统日期不能保证这种精度。所以你可以打印出毫秒,但它不会精确到一毫秒。有一个专门用于测量时间间隔的类,找到它并使用它:)查看以下内容以开始学习:
- System.IO.FileStream
- System.IO.FileMode
- 系统。随机
- 系统诊断。秒表
- System.TimeSpan
创建新的二进制文件(特定文件夹)
刷新并关闭文件
C#使用一种称为流的概念来进行二进制输入/输出
强制性文献:
这两种技术都在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();
}
使用(var fileStream=File.OpenWrite(path))
{
double fileSize=Math.Pow(10,10);//10GB
int bufferSize=1024;//1KB
byte[]buffer=new byte[bufferSize];//创建一个零的数组
for(int writed=0;writed
您在作业的哪一部分遇到问题?创建文件?写入文件?生成虚拟数据?获取当前时间?那么,当前时间的哪一部分导致了问题?您已经将项目分为8个任务-您完成这些任务的程度如何?您是否尝试过只设置文件的大小/长度?我建议您开始,尽可能深入,然后就您遇到的问题提出具体问题。请,向我们展示一些代码,并解释您遇到困难的部分。您可能需要查看System.IO.FileStream、System.random,谢谢。我以前从未使用过File.Create、“using”或“Stream.Write”,所以这就是为什么我不知道如何处理这个任务的原因。我会去做一些研究。OP明确地不想要一个完整的解决方案:PI知道。我就是忍不住。公平地说,我确实添加了一个扰流警报。:)哦,不要在for循环的每次迭代中都刷新。您应该只在需要时显式刷新,否则您将尝试对.NET和操作系统进行各种优化。对于写入之间没有“暂停”的顺序写入,这只会使性能变得更差(平均来说有一点,但在某些情况下,例如向ehm写入软盘驱动器或网络共享,这可能非常重要)。只在最后需要刷新,但无论如何,Dispose
会处理这个问题,因此即使在那时也不需要刷新。如果你没有忘记Dispose
…我在这里查看了你的帖子,并重新创建了它。同样的函数,其他变量等等,但至少我知道它现在是如何工作的。问题是它并没有。即使通过复制/粘贴代码,我也会出错