Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从listView1项(文件)获取文件完整路径?_C#_.net_Winforms - Fatal编程技术网

C# 如何从listView1项(文件)获取文件完整路径?

C# 如何从listView1项(文件)获取文件完整路径?,c#,.net,winforms,C#,.net,Winforms,我的设计器中有这样一个: 右侧是listView1中的文件。 左侧是该文件的目录主目录treeView1 我在“单击事件”菜单条项中有此代码: void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { if (e.ClickedItem.Text == "Upload") { List&

我的设计器中有这样一个:

右侧是listView1中的文件。 左侧是该文件的目录主目录treeView1

我在“单击事件”菜单条项中有此代码:

        void menuStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            if (e.ClickedItem.Text == "Upload")
            {
                List<String> selected = new List<String>();
                foreach (ListViewItem lvi in listView1.SelectedItems)
                {
                    selected.Add(lvi.Text);
                }
                AllFiles = selected.ToArray();
                Bgw.RunWorkerAsync();
            }
        }
所有文件都包含文件和路径,例如C:\test.txt

然后:

private void StringArrayUploadFiles(object sender, DoWorkEventArgs e)
        {
            try
            {
                foreach (string txf in files)
                {
                    string fn = txf;
                    BackgroundWorker bw = sender as BackgroundWorker;
                    if (f.TargetFolder != "" && f.TargetFolder != null)
                    {
                        createDirectory(f.TargetFolder);
                    }
                    else
                    {
                        f.TargetFolder = Path.GetDirectoryName(txf);
                        //createDirectory(f.TargetFolder);
                    }
                    string UploadPath = String.Format("{0}/{1}{2}", f.Host, f.TargetFolder == "" ? "" : f.TargetFolder + "/", Path.GetFileName(fn));
现在以txf为例,我有C:test.txt 那么在f.TargetFolder中我有:C:

在上传路径中,我有: 但是C:我需要它看起来像:

还有一些子目录,例如:

在menuStrip1_ItemClicked事件中,当我选择一个文件(例如test.txt)时,这个事件中已经出现了一个混乱

FileInfo fi = new FileInfo("temp.txt");
确定刚创建的文件的完整路径

        DirectoryInfo di = fi.Directory;
找出该目录中还有哪些其他条目

 FileSystemInfo[] fsi = di.GetFileSystemInfos();
在控制台中显示directoryinfo全名的步骤

Console.WriteLine("The directory '{0}' contains the following files and directories:", di.FullName);
打印该目录的所有文件和子目录的名称

        foreach (FileSystemInfo info in fsi)
            Console.WriteLine(info.Name);

将数据与视图分开。您肯定已经知道这些文件所属的文件夹,否则如何填充ListView?在填充ListView时将该路径存储在类级别,并在将它们添加到列表时使用System.IO.path.Combine()将它们重新组合在一起。或者,在创建ListViewItem时,只需将完整路径存储在它的Tag()属性中即可。Likr Idle\u Mind建议将额外的信息放入
ListViewItem.Tag
!最好是整个
FileInfo
对象。我不得不在我的问题中添加更多的代码来解释我想要得到什么。当我在listView1上选择一个文件时,我需要获得文件的目录,但只需要名称,例如C:\\so only C,如果目录是dannyistest:\\daniel\\hello,那么它应该是:dannyistest/daniel/hello/test.txt,因为我正在将文件上载到我的ftp服务器,所以目录的格式应该是这样的。以下要点这里提到的人是数据表示可以不同于存储。您应该存储尽可能多的信息来完成您的工作,然后只向用户显示其中的一部分。当程序经过处理阶段时,可以逐步构建“状态”对象。当您更新UI时,您应该有足够的信息来执行下一步。
Console.WriteLine("The directory '{0}' contains the following files and directories:", di.FullName);
        foreach (FileSystemInfo info in fsi)
            Console.WriteLine(info.Name);