Visual C# 2005 – 如何使用通配符 *.* 复制所有文件
2007-03-05 09:50
363 查看
原发问问题:
章老师:你好,新年快乐.
IO与数据存取密诀里有提到文件复制及移动目录.
但如何使用以前*.*的通配符来复制所有文件? 谢谢.请帮忙解答
解答:
亲爱的读者您好
很感谢您对于章立民研究室的支持
有关于您提到的问题
回复如下
图表1
如图表1所示,程序范例示范如何利用通配符 *,来复制数据夹内符合条件的所有文件,请特别注意我们是如何比对数据夹内的文件名称,并执行文件复制的动作。兹将程序代码列示如下:
private void btnCopyFolder_Click(object sender, EventArgs e)
{
string[] temp;
string tempStr;
string[] fileNames;
string sourceDir;
string destinationDir;
string mappingStr;
try
{
sourceDir = textBox1.Text.Substring(0, textBox1.Text.LastIndexOf(@"\"));
destinationDir = this.DestionFileTextBox.Text;
// 取得用户输入的路径所代表目录之文件名称集合。
temp = Directory.GetFiles(sourceDir);
for(int i = 0;i < temp.Length;i++)
{
tempStr = temp[i].Substring(temp[i].LastIndexOf(@"\") + 1);
temp[i] = tempStr;
}
mappingStr =
textBox1.Text.Substring(textBox1.Text.LastIndexOf(@"\") + 1,
textBox1.Text.Length - textBox1.Text.LastIndexOf(@"\") - 2);
// 将数组排序。
Array.Sort(temp, new CaseInsensitiveComparer());
fileNames = temp;
// 搜寻已排序之数组。
int fileIndex = Array.BinarySearch( fileNames, mappingStr, new CaseInsensitiveComparer());
if(fileIndex < 0)
{
fileIndex = ~fileIndex;
}
int matchIndex = 0;
// 计算符合条件的笔数。
while (fileIndex + matchIndex < fileNames.Length)
{
if(!(fileNames[fileIndex + matchIndex].StartsWith(
mappingStr, StringComparison.CurrentCulture)))
{
break;
}
matchIndex += 1;
}
string[] returnArray = null;
// 如果有找到符合条件的数据,
// 则将数据复制到数组变量。
if (matchIndex > 0)
{
returnArray = new string[matchIndex];
Array.Copy(fileNames, fileIndex, returnArray, 0, matchIndex);
for (int i = 0; i < returnArray.Length; i++)
{
File.Copy( sourceDir + @"\" + returnArray[i], destinationDir + @"\" + returnArray[i], true); }
// 启动 Windows 文件总管。
Process.Start("explorer.exe", this.DestionFileTextBox.Text);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void DirectoryBrowseButton_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderDialog = new FolderBrowserDialog();
folderDialog.RootFolder = Environment.SpecialFolder.MyComputer;
if (
(folderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK))
{
this.DestionFileTextBox.Text = folderDialog.SelectedPath;
}
}
章老师:你好,新年快乐.
IO与数据存取密诀里有提到文件复制及移动目录.
但如何使用以前*.*的通配符来复制所有文件? 谢谢.请帮忙解答
解答:
亲爱的读者您好
很感谢您对于章立民研究室的支持
有关于您提到的问题
回复如下
图表1
如图表1所示,程序范例示范如何利用通配符 *,来复制数据夹内符合条件的所有文件,请特别注意我们是如何比对数据夹内的文件名称,并执行文件复制的动作。兹将程序代码列示如下:
private void btnCopyFolder_Click(object sender, EventArgs e)
{
string[] temp;
string tempStr;
string[] fileNames;
string sourceDir;
string destinationDir;
string mappingStr;
try
{
sourceDir = textBox1.Text.Substring(0, textBox1.Text.LastIndexOf(@"\"));
destinationDir = this.DestionFileTextBox.Text;
// 取得用户输入的路径所代表目录之文件名称集合。
temp = Directory.GetFiles(sourceDir);
for(int i = 0;i < temp.Length;i++)
{
tempStr = temp[i].Substring(temp[i].LastIndexOf(@"\") + 1);
temp[i] = tempStr;
}
mappingStr =
textBox1.Text.Substring(textBox1.Text.LastIndexOf(@"\") + 1,
textBox1.Text.Length - textBox1.Text.LastIndexOf(@"\") - 2);
// 将数组排序。
Array.Sort(temp, new CaseInsensitiveComparer());
fileNames = temp;
// 搜寻已排序之数组。
int fileIndex = Array.BinarySearch( fileNames, mappingStr, new CaseInsensitiveComparer());
if(fileIndex < 0)
{
fileIndex = ~fileIndex;
}
int matchIndex = 0;
// 计算符合条件的笔数。
while (fileIndex + matchIndex < fileNames.Length)
{
if(!(fileNames[fileIndex + matchIndex].StartsWith(
mappingStr, StringComparison.CurrentCulture)))
{
break;
}
matchIndex += 1;
}
string[] returnArray = null;
// 如果有找到符合条件的数据,
// 则将数据复制到数组变量。
if (matchIndex > 0)
{
returnArray = new string[matchIndex];
Array.Copy(fileNames, fileIndex, returnArray, 0, matchIndex);
for (int i = 0; i < returnArray.Length; i++)
{
File.Copy( sourceDir + @"\" + returnArray[i], destinationDir + @"\" + returnArray[i], true); }
// 启动 Windows 文件总管。
Process.Start("explorer.exe", this.DestionFileTextBox.Text);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void DirectoryBrowseButton_Click(object sender, EventArgs e)
{
FolderBrowserDialog folderDialog = new FolderBrowserDialog();
folderDialog.RootFolder = Environment.SpecialFolder.MyComputer;
if (
(folderDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK))
{
this.DestionFileTextBox.Text = folderDialog.SelectedPath;
}
}
相关文章推荐
- Visual C# 2005 – 如何使用通配符 *.* 复制所有文件
- Visual C# - 读者询问如何复制目录以及目录下所有的子目录与文件
- Visual C# - 读者询问如何复制目录以及目录下所有的子目录与文件
- Visual C# 2005 - 如何取得某目录之下所有文件名称的字符串集合
- Visual C# 2005 - 如何取得某目录之下所有文件名称的字符串集合
- 如何使用Python获取某个路径下面所有文件的绝对路径以及其他操作
- 如何在 Windows 7 中使用多线程加快文件复制?
- 如何使用Fread和Fwrite写一个复制文件的函数
- 如何使用 Visual Studio 2005 将应用程序及其资源打包到一个 CAB 文件中
- VirtualBox: 如何复制已安装好系统的VDI文件作为新的Guest系统磁盘使用?
- 如何使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿传输数据
- 如何使用 WebBrowser 控件在 Visual C# 2005 或 Visual C# .NET 中打开 Office 文档
- 写一个通用的copy(String 原始路径,String 新路径),能复制所有文件,且名字和后缀名与源文件一致,在名字前拼接当前日期使用Scanner写入路径
- 请求帮助:如何解决烦人的VS.NET2003编译时“无法将程序集复制到文件,另一个程序正在使用,进程无法访问”的问题?
- 如何使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿传输数据
- Visual C# 2005 - 如何利用程序代码动态存取设定文件
- 如何读取和写入文件或 BLOB 列使用 ADO.NET 和 Visual C#.NET
- 如何使用C语言搜索指定目录下的所有文件?
- 关于C#的FTPRequest客户类如何使用通配符去服务器端匹配文件
- 如何使用 Visual C# 2005 或 Visual C# .NET 向 Excel 工作簿传输数据