从短文件名获取完整路径

时间:2014-03-02 10:18:36

标签: c#

我可以从文件名中获取完整路径,例如从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?
}

4 个答案:

答案 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 ''
*/