不支持Concat文件格式



使用VB,我试图通过将单词"NewEmployeesOut";一天中的短日期和时间。我得到以下错误System.NotSupportedException:"不支持给定路径的格式。"下面是我目前使用的代码,VB似乎不喜欢我在尝试导出.txt文件时在concat函数中使用的字符。

Private Sub btnWrite_Click(sender As Object, e As EventArgs) Handles btnWrite.Click
Dim writeRecord As New StreamWriter
(New FileStream("NewEmployeesOut" & Date.Today.ToShortDateString & Date.Now.ToShortTimeString & ".txt", FileMode.Append, FileAccess.Write))
Dim EmployeeInformation1 As New EmployeeInformation()

writeRecord.Write(EmployeeInformation1.LastName & "|")
writeRecord.Write(EmployeeInformation1.FirstName & "|")
writeRecord.Write(EmployeeInformation1.DepartmentNo & "|")
writeRecord.Write(EmployeeInformation1.CreateUserName(EmployeeInformation1.FirstName, EmployeeInformation1.LastName) & "|")
writeRecord.WriteLine(EmployeeInformation1.CreatePassword)
writeRecord.Close()
End Sub

来自MS文档https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file以下字符被重新覆盖。

< (less than)
> (greater than)
: (colon) 
" (double quote) 
/ (forward slash) 
 (backslash) 
| (vertical bar or pipe) 
? (question mark)
* (asterisk)

格式化如下的文件名将通过审核。大写的HH表示24小时的时间。

Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
Dim fileName As String = "NewEmployeesOut" & Now.ToString(" MMMM dd, yyyy HH,mm") & ".txt"
Debug.Print(fileName)
File.CreateText(fileName)
End Sub

在直接窗口中。。。

NewEmployeesOut December 10, 2020 18,07.txt

你短暂的约会可能看起来像"2020年12月31日";或";2020年12月31日";它们不是有效的文件名。试试之类的东西

Dim now As DateTime = DateTime.Now
Dim fileName As String = $"NewEmployeesOut_{now:yyyy-MM-dd}_{now:HHmm}.txt"

关于另一个问题:发布它的地方不对,不要在评论中再问其他问题。

我认为你必须先学习一些基础知识,阅读/观看一些VB.Net教程,也许还有一些干净的代码原理,比如干净的代码技术。您的问题表明您还不知道如何编写简单的代码。

试着构建你正在做的事情,避免(像你的例子中那样(复制4倍相同的代码行,而是创建函数来封装业务逻辑。例如,写一个文件与组装一个文件名无关,因此这两件事不应该用相同的方法进行。

但这一切都说明了,这里有一个如何构建代码的想法(来自评论,而不是主要问题(,尽管我对这两个随机数字的可用性不太肯定。。。

用法:

Dim fileName As String = GetFileName("Smith", "John")

方法/特性:

Private Shared Function GetFileName(lastName As String, firstName As String) As String
lastName = NormalizeAndCrop(lastName, 7)
firstName = NormalizeAndCrop(firstName, 10)
Dim randomNumber As Int32 = Randomizer.Next(0, 100)
Return $"{lastName}{firstName}{randomNumber:00}"
End Function
Private Shared Function NormalizeAndCrop(text As String, length As Int32)
'Check args
If (length < 0) Then Throw New ArgumentOutOfRangeException(NameOf(length), length, "A non-negative value expected!")
If (text Is Nothing) OrElse (length = 0) Then Return String.Empty
text = text.Normalize()
'Copy only valid characters
Dim result As New StringBuilder()
For i As Int32 = 0 To text.Length - 1
Dim c As Char = text(i)
If (IsValidFileNameChar(c)) Then
result.Append(c)
If (result.Length = length) Then
Return result.ToString()
End If
End If
Next
Return result.ToString()
End Function
Private Shared Function IsValidFileNameChar(c As Char) As Boolean
If (Char.IsControl(c)) Then Return False
If (InvalidFileNameChars.IndexOf(c) > -1) Then Return False
Return True
End Function
Private Shared ReadOnly Property Randomizer As Random = New Random(Environment.TickCount)
Private Shared ReadOnly Property InvalidFileNameChars As String = New String(Path.GetInvalidFileNameChars())

最新更新