作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用此方法 Path.GetFileNameWithoutExtension
从字符串中删除文件扩展名,例如从“abc:file.jpg”到“abc:file”但是当我这样做时
Path.GetFileNameWithoutExtension("abc:file.jpg")
它将结果显示为"file"。它还删除了“abc:”。为什么会这样?有没有更好的方法来解决这个问题?
最佳答案
字符“:”(冒号)作为文件名的一部分是不合法的。它将它解释为路径分隔符,因此当您仅请求文件名时,它将删除它和它之前的任何内容。
这是一种检查文件名是否有效的方法:
此函数将对有效文件名返回 true,对无效文件名返回 false:
private bool IsValidFilename(string filename)
{
//
//-- Get array with invalid chars for filenames
//
char[] illegalChars = Path.GetInvalidFileNameChars;
//
//-- Go through each char in filename and check if the char is
// in our array of invalid chars
//
foreach (char c in filename) {
if (illegalChars.Contains(c))
return false;
}
//
//-- All are valid, return true
//
return true;
}
如果上述函数返回 false,您可以使用下一个函数来格式化文件名并删除非法字符(存在执行此 IIRC 的操作系统函数,但手动执行此操作很简单):
private string MakeFilenameValid(string filename, char replacment)
{
//
//-- Get array with invalid chars for filenames
//
char[] illegalChars = Path.GetInvalidFileNameChars;
StringBuilder validFilename = new StringBuilder();
//
//-- Go through each char in filename and check if the char is
// in our array of invalid chars. If it is, replace it
//
foreach (char c in filename) {
if (illegalChars.Contains(c)) {
validFilename.Append(replacment);
} else {
validFilename.Append(c);
}
}
//
//-- Return filename
//
return validFilename.ToString;
}
使用示例:
private void Button1_Click(System.Object sender, System.EventArgs e)
{
string filename = "abc:file.jpg";
if (!IsValidFilename(filename)) {
filename = MakeFilenameValid(filename, "_");
}
MessageBox.Show(filename);
}
在 VB 中:
Private Sub Button1_Click(sender As System.Object, _
e As System.EventArgs) Handles Button1.Click
Dim filename As String = "abc:file.jpg"
If Not IsValidFilename(filename) Then
filename = MakeFilenameValid(filename, "_")
End If
MessageBox.Show(filename)
End Sub
Private Function IsValidFilename(filename As String) As Boolean
'
'-- Get array with invalid chars for filenames
'
Dim illegalChars() As Char = Path.GetInvalidFileNameChars
'
'-- Go through each char in filename and check if the char is
' in our array of invalid chars
'
For Each c As Char In filename
If illegalChars.Contains(c) Then Return False
Next
'
'-- All are valid, return true
'
Return True
End Function
Private Function MakeFilenameValid(filename As String, replacment As Char) As String
'
'-- Get array with invalid chars for filenames
'
Dim illegalChars() As Char = Path.GetInvalidFileNameChars
Dim validFilename As New StringBuilder
'
'-- Go through each char in filename and check if the char is
' in our array of invalid chars. If it is, replace it
'
For Each c As Char In filename
If illegalChars.Contains(c) Then
validFilename.Append(replacment)
Else
validFilename.Append(c)
End If
Next
'
'-- Return filename
'
Return validFilename.ToString
End Function
关于c# - 使用 GetFileNameWithoutExtension 消除文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13946535/
我使用此方法 Path.GetFileNameWithoutExtension 从字符串中删除文件扩展名,例如从“abc:file.jpg”到“abc:file”但是当我这样做时 Path.GetFi
我正在尝试使用以下 LINQ 语句来获取满足特定条件的文件名: query.First( f => (f.MD5 == md5 || f.ArchiveFiles.Any(a
我是一名优秀的程序员,十分优秀!