回答:
このPath.GetFileNameWithoutExtension
メソッドは、名前から明らかなように、拡張子なしで引数として渡すファイル名を提供します。
この目的のためにフレームワークにメソッドがあり、拡張機能を除いてフルパスを維持します。
System.IO.Path.ChangeExtension(path, null);
ファイル名だけが必要な場合は、
System.IO.Path.GetFileNameWithoutExtension(path);
null
には魔法の価値があります。String.Empty
別名を使用する""
と、末尾に[ .
]ドットが残ります。
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の回答
以下を使用し、コードを減らしました
string fileName = "C:\file.docx";
MessageBox.Show(Path.Combine(Path.GetDirectoryName(fileName),Path.GetFileNameWithoutExtension(fileName)));
出力は
C:\ file
Path.Combine()
指定する代わりに使用し"\\"
ます。
私はそれが古い質問でPath.GetFileNameWithoutExtension
あり、より良い、そしておそらくよりクリーンなオプションであることを知っています。しかし、個人的に私はこの2つの方法をプロジェクトに追加し、それらを共有したいと考えました。範囲とインデックスを使用するため、これには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
ですか?:-)