หากฉันมีสตริงที่บอกว่า"abc.txt"
มีวิธีที่รวดเร็วในการรับซับสตริงที่เป็นเพียงแค่"abc"
?
ฉันไม่สามารถทำได้fileName.IndexOf('.')
เพราะชื่อไฟล์อาจเป็น"abc.123.txt"
หรืออะไรก็ได้และฉันแค่ต้องการกำจัดส่วนขยาย (เช่น"abc.123"
)
หากฉันมีสตริงที่บอกว่า"abc.txt"
มีวิธีที่รวดเร็วในการรับซับสตริงที่เป็นเพียงแค่"abc"
?
ฉันไม่สามารถทำได้fileName.IndexOf('.')
เพราะชื่อไฟล์อาจเป็น"abc.123.txt"
หรืออะไรก็ได้และฉันแค่ต้องการกำจัดส่วนขยาย (เช่น"abc.123"
)
คำตอบ:
Path.GetFileNameWithoutExtension
วิธีช่วยให้คุณมีชื่อไฟล์ที่คุณผ่านเป็นอาร์กิวเมนต์โดยไม่มีส่วนขยายที่เป็นควรจะชัดเจนจากชื่อ
มีวิธีการในกรอบสำหรับวัตถุประสงค์นี้ซึ่งจะเก็บเส้นทางแบบเต็มยกเว้นส่วนขยาย
System.IO.Path.ChangeExtension(path, null);
หากจำเป็นต้องใช้ชื่อไฟล์เท่านั้นให้ใช้
System.IO.Path.GetFileNameWithoutExtension(path);
null
มีค่ามายากลที่นี่ หากคุณใช้String.Empty
aka ""
คุณจะเหลือ [ต่อท้าย.
จุด]
GetFileNameWithoutExtension
ชัดเจนยิ่งขึ้น แม้ว่ามันจะเป็นเรื่องดีที่รู้เกี่ยวกับผลข้างเคียงที่อาจไม่พึงประสงค์และการมีอยู่ของทางเลือกอื่นเพื่อหลีกเลี่ยง
คุณสามารถใช้ได้
string extension = System.IO.Path.GetExtension(filename);
จากนั้นนำส่วนขยายออกด้วยตนเอง:
string result = filename.Substring(0, filename.Length - extension.Length);
String.LastIndexOf จะทำงานได้
string fileName= "abc.123.txt";
int fileExtPos = fileName.LastIndexOf(".");
if (fileExtPos >= 0 )
fileName= fileName.Substring(0, fileExtPos);
foo/bar.cat/cheese
!
String.LastIndexOf
อันตรายสำหรับการทำสิ่งนี้ให้สำเร็จ สำหรับไฟล์ที่ไม่มีนามสกุลเนื่องจาก @Cameron ได้ระบุไว้ด้านบนผลลัพธ์ของคุณอาจไม่ใช่สิ่งที่คุณต้องการ วิธีที่ปลอดภัยที่สุดคือใช้คำตอบของ @ Logman ด้านบน
หากคุณต้องการสร้างเส้นทางแบบเต็มโดยไม่มีส่วนขยายคุณสามารถทำสิ่งนี้:
Path.Combine( Path.GetDirectoryName(fullPath), Path.GetFileNameWithoutExtension(fullPath))
แต่ฉันกำลังมองหาวิธีที่ง่ายกว่าในการทำเช่นนั้น ไม่มีใครมีความคิดใด ๆ
ฉันใช้ด้านล่างรหัสน้อย
string fileName = "C:\file.docx";
MessageBox.Show(Path.Combine(Path.GetDirectoryName(fileName),Path.GetFileNameWithoutExtension(fileName)));
ผลผลิตจะได้
C: \ ไฟล์
Path.Combine()
"\\"
ถ้าคุณต้องการใช้การดำเนินการของ String คุณสามารถใช้ฟังก์ชัน lastIndexOf () ซึ่งค้นหาการเกิดขึ้นครั้งสุดท้ายของอักขระหรือสตริงย่อย Java มีฟังก์ชั่นสตริงมากมาย
คุณอาจไม่ได้ถาม UWP API แต่ใน UWP file.DisplayName
เป็นชื่อที่ไม่มีนามสกุล หวังว่ามีประโยชน์สำหรับคนอื่น ๆ
ฉันรู้ว่ามันเป็นคำถามเก่าและPath.GetFileNameWithoutExtension
เป็นตัวเลือกที่ดีกว่าและสะอาดกว่า แต่เป็นการส่วนตัวฉันได้เพิ่มสองวิธีนี้ลงในโครงการของฉันและต้องการแบ่งปัน สิ่งนี้ต้องใช้ C # 8.0 เนื่องจากใช้ช่วงและดัชนี
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!!!");
}
}
การใช้งานนี้ควรใช้งานได้
string file = "abc.txt";
string fileNoExtension = file.Replace(".txt", "");
abc.txt.pdf
อะไร :-)