C# 如何生成文件
我想在用户单击按钮时生成一个.txt文件。问题是我不知道怎么做?我希望它使用以下格式:C# 如何生成文件,c#,vb.net,C#,Vb.net,我想在用户单击按钮时生成一个.txt文件。问题是我不知道怎么做?我希望它使用以下格式: 00000012 <-- at the very start of the text file 2011 11 29 <-- Year 2011, Month 11, Day 29 (the year month and day based on my PC) 0010 or 0054 <-- this is a random number randomly one of these 2 n
00000012 <-- at the very start of the text file
2011 11 29 <-- Year 2011, Month 11, Day 29 (the year month and day based on my PC)
0010 or 0054 <-- this is a random number randomly one of these 2 numbers...
123456 <-- Time, Hour 12, Minutes 34, Seconds 56.
我决定将最后一代随机6代改为时间。如何在C#?从开始,然后用C#遍历或重写代码,以构建问题中描述的信息。解决问题的最简单方法是使用
String.Format
,它在VB.NET中与在C#中一样
不过,在开始之前,用VB.NET代码解决一些问题是值得的;修复这些问题也会使您的C#代码变得更好:
- 您的
实例Random
是在表单(模块)范围内声明的,但您只能在r
过程中使用它:最好始终尽可能限制变量范围,换句话说,使声明“尽可能接近”用法Form1\u Load
- 关于
:请记住,这实际上创建了一个可预测的(基于时间的)数字序列,因此它不应该用于任何与安全相关的内容(这就是System.Random
的用途)。无论如何,您对Random的使用不是很强,我也不确定您的实际用例,但这始终是需要记住的System.security.Cryptography.RNGCryptoServiceProvider
- 您使用的注释几乎是字面上描述代码的功能,这是毫无意义的:只添加注释,以增加对代码为什么要做这些事情的更多洞察,而不是如何做
- NET中的字符串是不可变的,这意味着每次使用
运算符时,您都会创建一个新字符串,让旧字符串一直保留到垃圾回收开始。过了一段时间,这会变得非常昂贵:取而代之的是,&
并在需要时使用它Text.StringBuilder
- 您可以在
下创建一个文件。除了该目录在不同版本的Windows上可能有不同的名称(更不用说Linux了,如果您运行的是Linux),用户没有权限在任何非传统(即XP后)版本的Windows上写入该目录。因此,如果您这样做,您的程序在分发时将崩溃:如果您及早启动,这将为您节省很多麻烦C:\ProgramFiles
string.Format
,它非常方便。例如,原始VB.NET代码可以重写如下:
Sub Form1_Load(s As Object, e As EventArgs)
Using sw As New IO.StreamWriter(IO.Path.Combine(
Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
"maincode.txt"))
sw.WriteLine("00000012{0:yyyyMMdd}{1}{0:HHmmss}", Now,
If((New Random).Next(0, 2) = 0, "0010", "0054"))
End Using
End Sub
执行时,应创建C:\Users\YourUserName\AppData\Roaming\maincode.txt
(如果您使用的是XP或某些本地化版本的Windows,请在调试器中检查Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
的值以了解详情)
将其转换为C#很简单:如果您使用其中的一个,它应该会给您以下内容:
public void Form1_Load(object s, EventArgs e)
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "maincode.txt"))) {
sw.WriteLine("00000012{0:yyyyMMdd}{1}{0:HHmmss}", DateAndTime.Now, (new Random()).Next(0, 2) == 0 ? "0010" : "0054");
}
}
基本上,它为您添加了一些分号和大括号,包括完全限定的名称空间,并重写了三元条件:.NET Framework位是相同的
希望这对您有所帮助,祝您编程成功 所以。。到目前为止,你的c#代码中有什么,你遇到了什么实际问题?这是一个VB.NET,不是c#@CodeSparke。他说他是c#的新手,他用VB的代码做到了。他知道这是VB,他写的。我支持BugFinder的问题,实际的问题是什么?你写东西的时候好像连C#语法都不懂(因为从VB到C#的代码转换很简单),为什么不使用其中的一种呢?其实这只是为了我的电脑。但是,我最近研究了如何使用specialfolder指定文件夹。谢谢你的意见和链接。我不知道他们的车甚至是一个转换器。。。谢谢你。
public void Form1_Load(object s, EventArgs e)
{
using (System.IO.StreamWriter sw = new System.IO.StreamWriter(System.IO.Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "maincode.txt"))) {
sw.WriteLine("00000012{0:yyyyMMdd}{1}{0:HHmmss}", DateAndTime.Now, (new Random()).Next(0, 2) == 0 ? "0010" : "0054");
}
}