我在这里的是用户从外部驱动器中选择一个包含.txt文件的文件夹,并使用文件名将虚拟文件写入本地文件夹。
我对以下代码有2个问题。
如何删除.txt扩展名?代码复制文件名并创建文件但标记为“text.txt.png”,但我需要它来阅读“text.png”。
int g;
private void folderSelect()
{
FolderBrowserDialog folder = new FolderBrowserDialog();
folder.RootFolder = Environment.SpecialFolder.MyComputer;
folder.ShowNewFolderButton = false;
folder.Description = "Select Folder";
if (folder.ShowDialog() == DialogResult.OK)
{
DirectoryInfo files = new DirectoryInfo(folder.SelectedPath);
FileInfo[] textFiles = files.GetFiles("*.txt");
while (g < textFiles.Length)
{
if (g <= textFiles.Length)
{
File.Create("path/" + (textFiles[g].Name + ".png"));
g++;
}
else
{
break;
}
}
}
注意:我尝试使用Path.GetFileNameWithoutExtension删除扩展程序,但我不确定我是否正确使用它。
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:2)
const string NEW_PATH = "path/";
if (!Directory.Exists(NEW_PATH))
Directory.CreateDirectory(NEW_PATH);
const string PATH_TO_CHECK = "correctpath";
FolderBrowserDialog folder = new FolderBrowserDialog();
folder.RootFolder = Environment.SpecialFolder.MyComputer;
folder.ShowNewFolderButton = false;
folder.Description = "Select Folder";
if (folder.ShowDialog() == DialogResult.OK)
{
string pathPastDrive = folder.SelectedPath.Substring(Path.GetPathRoot(folder.SelectedPath).Length).ToLower();
// Here it depends on whether you want to check (1) that the path is EXACTLY what you want,
// or (2) whether the selected path just needs to END in the path that you want.
/*1*/ if (!pathPastDrive == PATH_TO_CHECK)
/*2*/ if (!pathPastDrive.EndsWith(PATH_TO_CHECK))
return; // or you can throw an exception if you want
foreach (string textFile in Directory.GetFiles(folder.SelectedPath, "*.txt"))
File.Create(NEW_PATH + Path.GetFileNameWithoutExtension(textFile) + ".png");
}
您可以使用GetFileNameWithoutExtension
,这样可以轻松实现。
此外,如果您已确定新文件夹存在,那么您可以忽略前三行,并将NEW_PATH
替换为最后一行中的"path/"
。
答案 1 :(得分:2)
要查看返回的路径,只需使用SelectedPath
属性,然后您可以将其与您想到的任何内容进行比较。路径前的@
只意味着我不必逃避任何角色,它与"C:\\MyPath"
相同。
FolderBrowserDialog folder = new FolderBrowserDialog();
if (folder.ShowDialog() == DialogResult.OK)
{
if (folder.SelectedPath == @"C:\MyPath")
{
// DO SOMETHING
}
}
你已经敲了一下没有扩展名的文件名,更改了这一行:
File.Create("path/" + (textFiles[g].Name + ".png"));
对此:
File.Create("path/" + (Path.GetFileNameWithoutExtension(textFiles[g].Name) + ".png"));
编辑:
要获取文件夹名称,您已拥有DirectoryInfo对象,因此只需使用:
DirectoryInfo files = new DirectoryInfo(folder.SelectedPath);
string folderName = files.Name;