Câu trả lời:
Các Path.GetFileNameWithoutExtension
phương pháp mang đến cho bạn tên tập tin bạn vượt qua như một cuộc tranh cãi mà không có phần mở rộng, như nên được rõ ràng từ tên.
Có một phương pháp trong khung cho mục đích này, nó sẽ giữ đường dẫn đầy đủ ngoại trừ phần mở rộng.
System.IO.Path.ChangeExtension(path, null);
Nếu chỉ cần tên tệp, sử dụng
System.IO.Path.GetFileNameWithoutExtension(path);
null
một giá trị kỳ diệu ở đây. Nếu bạn sử dụng String.Empty
aka, ""
bạn sẽ bị bỏ lại dấu .
chấm [ ].
GetFileNameWithoutExtension
rõ ràng hơn. Mặc dù thật tuyệt khi biết về tác dụng phụ không mong muốn của nó và sự tồn tại của một giải pháp thay thế để tránh nó.
Bạn có thể dùng
string extension = System.IO.Path.GetExtension(filename);
Và sau đó xóa phần mở rộng bằng tay:
string result = filename.Substring(0, filename.Length - extension.Length);
String.LastIndexOf sẽ hoạt động.
string fileName= "abc.123.txt";
int fileExtPos = fileName.LastIndexOf(".");
if (fileExtPos >= 0 )
fileName= fileName.Substring(0, fileExtPos);
foo/bar.cat/cheese
!
String.LastIndexOf
là nguy hiểm để hoàn thành một cái gì đó như thế này. Đối với các tệp không có phần mở rộng, như @Cameron đã nêu ở trên, kết quả của bạn có thể không như bạn muốn. Cách an toàn nhất để làm điều này là sử dụng câu trả lời của @ Logman ở trên.
Tôi đã sử dụng dưới đây, ít mã hơn
string fileName = "C:\file.docx";
MessageBox.Show(Path.Combine(Path.GetDirectoryName(fileName),Path.GetFileNameWithoutExtension(fileName)));
Đầu ra sẽ là
Tập tin C: \
Path.Combine()
hơn là chỉ định "\\"
.
Tôi biết đó là một câu hỏi cũ và Path.GetFileNameWithoutExtension
là một lựa chọn tốt hơn và có thể sạch hơn. Nhưng cá nhân tôi đã thêm hai phương pháp này vào dự án của mình và muốn chia sẻ chúng. Điều này đòi hỏi C # 8.0 do nó sử dụng phạm vi và chỉ số.
public static string RemoveExtension(this string file) => ReplaceExtension(file, null);
public static string ReplaceExtension(this string file, string extension)
{
var split = file.Split('.');
if (string.IsNullOrEmpty(extension))
return string.Join(".", split[..^1]);
split[^1] = extension;
return string.Join(".", split);
}
/// <summary>
/// Get the extension from the given filename
/// </summary>
/// <param name="fileName">the given filename ie:abc.123.txt</param>
/// <returns>the extension ie:txt</returns>
public static string GetFileExtension(this string fileName)
{
string ext = string.Empty;
int fileExtPos = fileName.LastIndexOf(".", StringComparison.Ordinal);
if (fileExtPos >= 0)
ext = fileName.Substring(fileExtPos, fileName.Length - fileExtPos);
return ext;
}
private void btnfilebrowse_Click(object sender, EventArgs e)
{
OpenFileDialog dlg = new OpenFileDialog();
//dlg.ShowDialog();
dlg.Filter = "CSV files (*.csv)|*.csv|XML files (*.xml)|*.xml";
if (dlg.ShowDialog() == DialogResult.OK)
{
string fileName;
fileName = dlg.FileName;
string filecopy;
filecopy = dlg.FileName;
filecopy = Path.GetFileName(filecopy);
string strFilename;
strFilename = filecopy;
strFilename = strFilename.Substring(0, strFilename.LastIndexOf('.'));
//fileName = Path.GetFileName(fileName);
txtfilepath.Text = strFilename;
string filedest = System.IO.Path.GetFullPath(".\\Excels_Read\\'"+txtfilepath.Text+"'.csv");
// filedest = "C:\\Users\\adm\\Documents\\Visual Studio 2010\\Projects\\ConvertFile\\ConvertFile\\Excels_Read";
FileInfo file = new FileInfo(fileName);
file.CopyTo(filedest);
// File.Copy(fileName, filedest,true);
MessageBox.Show("Import Done!!!");
}
}
Việc thực hiện này nên hoạt động.
string file = "abc.txt";
string fileNoExtension = file.Replace(".txt", "");
abc.txt.pdf
? :-)