C# 将文件路径传递给其他方法
C# pass file path to other methods
如何将从已删除文件中获取的文件路径传递为另一个 function/method 中的路径?
在 C# windows 表单程序中,我有一个可以将文件拖放到其中的列表框,它会在该列表框中显示文件路径:
public Form1()
{
InitializeComponent();
this.listBox1.DragDrop += new
System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop);
this.listBox1.DragEnter += new
System.Windows.Forms.DragEventHandler(this.listBox1_DragEnter);
}
// drag and drop process
private void listBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
var files = (string[])e.Data.GetData(DataFormats.FileDrop);
if (files.Length == 1 && listBox1.Items.Count == 0)
{
e.Effect = DragDropEffects.All;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void listBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
string[] s = (string[])e.Data.GetData(DataFormats.FileDrop, false);
int i;
for (i = 0; i < s.Length; i++)
listBox1.Items.Add(s[i]);
}
在程序的另一部分,按下按钮后,我可以将所有文件解压缩到一个设置的目录中,但我希望该目录是我在上面的列表框中放置的目录,而不是在代码中永久设置的目录.
public static void MyMethod3()
{
string startPath = @"C:\testfolder\testprop\practicefolder\";
string extractPath = @"C:\testfolder\testprop\practicefolder\unzippedstuff";
Directory.GetFiles(startPath, "*.zip", SearchOption.AllDirectories).ToList()
.ForEach(zipFilePath =>
{
var extractPathForCurrentZip = Path.Combine(extractPath, Path.GetFileNameWithoutExtension(zipFilePath));
if (!Directory.Exists(extractPathForCurrentZip))
{
Directory.CreateDirectory(extractPathForCurrentZip);
}
ZipFile.ExtractToDirectory(zipFilePath, extractPathForCurrentZip);
});
}
我实际上想同时将相同的路径传递给其他几个 functions/methods/processes,但这似乎是最干净的例子。
抱歉,如果这是一个 stupid/easy 问题,或者如果我做了许多非常错误的事情。我尝试了很多我发现看起来可行的方法,但没有成功。
创建一个字段并将其用作变量,以便它可用于整个 class
我最终遵循了这个答案:How to make a variable available to all classes in XNA/monogame?
"Just create a static class where you will store all your global variables and it will be accessible from all your classes."
public static class MyGlobals
{
public static string finalPathForWork { get; set; }
}
我确定这不是最好的方法,但它现在有效。
如何将从已删除文件中获取的文件路径传递为另一个 function/method 中的路径?
在 C# windows 表单程序中,我有一个可以将文件拖放到其中的列表框,它会在该列表框中显示文件路径:
public Form1()
{
InitializeComponent();
this.listBox1.DragDrop += new
System.Windows.Forms.DragEventHandler(this.listBox1_DragDrop);
this.listBox1.DragEnter += new
System.Windows.Forms.DragEventHandler(this.listBox1_DragEnter);
}
// drag and drop process
private void listBox1_DragEnter(object sender, System.Windows.Forms.DragEventArgs e)
{
var files = (string[])e.Data.GetData(DataFormats.FileDrop);
if (files.Length == 1 && listBox1.Items.Count == 0)
{
e.Effect = DragDropEffects.All;
}
else
{
e.Effect = DragDropEffects.None;
}
}
private void listBox1_DragDrop(object sender, System.Windows.Forms.DragEventArgs e)
{
string[] s = (string[])e.Data.GetData(DataFormats.FileDrop, false);
int i;
for (i = 0; i < s.Length; i++)
listBox1.Items.Add(s[i]);
}
在程序的另一部分,按下按钮后,我可以将所有文件解压缩到一个设置的目录中,但我希望该目录是我在上面的列表框中放置的目录,而不是在代码中永久设置的目录.
public static void MyMethod3()
{
string startPath = @"C:\testfolder\testprop\practicefolder\";
string extractPath = @"C:\testfolder\testprop\practicefolder\unzippedstuff";
Directory.GetFiles(startPath, "*.zip", SearchOption.AllDirectories).ToList()
.ForEach(zipFilePath =>
{
var extractPathForCurrentZip = Path.Combine(extractPath, Path.GetFileNameWithoutExtension(zipFilePath));
if (!Directory.Exists(extractPathForCurrentZip))
{
Directory.CreateDirectory(extractPathForCurrentZip);
}
ZipFile.ExtractToDirectory(zipFilePath, extractPathForCurrentZip);
});
}
我实际上想同时将相同的路径传递给其他几个 functions/methods/processes,但这似乎是最干净的例子。
抱歉,如果这是一个 stupid/easy 问题,或者如果我做了许多非常错误的事情。我尝试了很多我发现看起来可行的方法,但没有成功。
创建一个字段并将其用作变量,以便它可用于整个 class
我最终遵循了这个答案:How to make a variable available to all classes in XNA/monogame?
"Just create a static class where you will store all your global variables and it will be accessible from all your classes."
public static class MyGlobals
{
public static string finalPathForWork { get; set; }
}
我确定这不是最好的方法,但它现在有效。