我可以从文件名中获取完整路径,例如从test.txt获取完整目录路径,或者有没有办法可以保存它
我问这个的原因是我正在制作像Notepad ++这样的应用程序你们中的一些人可能听说过它。更改选项卡控件选项卡时,我希望表单的文本是完整目录,而选项卡文本只是filename.format
我到目前为止的代码
private void tabControl1_TabIndexChanged(object sender, EventArgs e)
{
if (tabControl1.SelectedTab.Text.StartsWith("New"))
{
int count = tabControl1.TabCount - 1;
this.Text = tabControl1.Controls[count].Text + " - My Note 1.0";
}
//It is a directory and i need to make the forms text the path here?
}
答案 0 :(得分:2)
您可以使用System.IO.Path.GetFullPath
:
var fullPath = Path.GetFullPath("test.txt");
如果传入短文件名,则会扩展为长文件名。
如果c:\ temp \ newdir是当前目录,则在文件名(如test.txt)上调用GetFullPath将返回c:\ temp \ newdir \ test.txt。
如果您想从中获取路径,请使用System.IO.Path.GetDirectoryName
var path = Path.GetDirectoryName(fullPath)
答案 1 :(得分:2)
我认为您应该保留完整路径并从完整路径获取文件名,而不是相反。关键是使用表示文档的类型,并让选项卡查看该文档。如果每个选项卡引用一个文档,并且每个文档都知道它的完整路径,那么您可以从文档的完整路径中获取短文件名。
public class Document
{
public string FullPath { get; set; } // Full path to file, null for unsaved
public string FileName
{
get { return Path.GetFileName(FullPath); }
}
}
当关注新选项卡时,获取活动选项卡的文档并从文档的FullPath设置表单标题。
private void tabControl1_TabIndexChanged(object sender, EventArgs e)
{
Document activeDoc = GetDocumentFromActiveTab();
// Update win title with full path of active doc.
this.Text = (activeDoc.FullPath ?? "Unsaved document") + " MyApp" + version;
}
编辑:
这里的关键当然是未显示的方法GetDocumentFromActiveTab()
。您需要实现管理文档的数据结构,并将它们连接到选项卡。我没有在答案中包含,你需要尝试自己。一个想法是创建一个表示整个应用程序状态的类型,包括所有选项卡和文档。
public class Workspace
{
private Dictionary<SomeTypeOfView, Document> documentsOpenInViews;
// Methods to register a document to a tab, get document for a tab
// remove tab+document when tab is closed etc.
}
答案 2 :(得分:0)
// not sure if this is what you want
说你的路径名是
string strFFL = @"C:\path\filename.format";
Console.WriteLine(System.IO.Path.GetFileName(strFFL)); //->filename.format
Console.WriteLine(System.IO.Path.GetDirectoryName(strFFL)); //-> C:\path
http://msdn.microsoft.com/en-us/library/system.io.path.getfilename(v=vs.110).aspx
http://msdn.microsoft.com/en-us/library/system.io.path.getdirectoryname(v=vs.110).aspx
答案 3 :(得分:0)
我认为这实际上是倒退了。我想你想保留文件的完整路径,并且只能在选项卡上显示文件名。所以我认为你想要Path.GetDirectory名称。
来自:http://msdn.microsoft.com/en-us/library/system.io.path.getdirectoryname(v=vs.110).aspx
string filePath = @"C:\MyDir\MySubDir\myfile.ext";
string directoryName;
int i = 0;
while (filePath != null)
{
directoryName = Path.GetDirectoryName(filePath);
Console.WriteLine("GetDirectoryName('{0}') returns '{1}'",
filePath, directoryName);
filePath = directoryName;
if (i == 1)
{
filePath = directoryName + @"\"; // this will preserve the previous path
}
i++;
}
/*
This code produces the following output:
GetDirectoryName('C:\MyDir\MySubDir\myfile.ext') returns 'C:\MyDir\MySubDir'
GetDirectoryName('C:\MyDir\MySubDir') returns 'C:\MyDir'
GetDirectoryName('C:\MyDir\') returns 'C:\MyDir'
GetDirectoryName('C:\MyDir') returns 'C:\'
GetDirectoryName('C:\') returns ''
*/