我使用C#上的Microsoft Visual C#在Windows应用程序的工作2010年奇怪的问题时,文件名和文件夹名称相同
的应用是帮助用户更改多个名称文件在一个目录中。例如:
我有一个目录c五个文件:/ TEMP命名为:
rainmoon.txt
terrain.txt
things.txt
pipe.txt
temp.txt
如果我尝试重命名“rainmoon.tx t“说,”rainsun.txt“,然后我只需要输入,我只想用”太阳“来代替”月亮“。我的应用程序是这样一种方式,它将浏览所有包含“月亮”的文件,然后继续用“太阳”代替它
问题出现在文件名(temp.txt)和文件夹(也称为temp)文件所在的名称相同。因此,对于上面给出的例子,如果我尝试重命名甚至部分“temp.txt”,我得到一个DirectoryNotFoundException。
下面是我使用的代码。我尽了最大的努力来解决这个问题,我强烈地感觉到这是由File.Move引起的。
for (int x = 0; x <= filesCheckList.CheckedItems.Count - 1; x++)
{
globalvar.fName = filesCheckList.CheckedItems[x].ToString();
DirectoryInfo mydir = new DirectoryInfo(globalvar.DIR);
FileInfo[] filesx = mydir.GetFiles(".", SearchOption.AllDirectories);
FileInfo[] f = mydir.GetFiles();
foreach (FileInfo file in filesx)
{
//try
{
if (file.Name == globalvar.fName)
{
if (file.Name != "History.txt")
File.Move(file.FullName, file.FullName.ToString().Replace(globalvar.FIL, globalvar.REP));
}
}
}
}
我的完整代码是在任何人想要查看的情况下。我不排除也许在编码的某个地方导致这个问题。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace TOMOD_W_A
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
applyButton.Enabled = false;
}
private void applyButton_Click(object sender, EventArgs e)
{
globalvar.FIL = filTxt.Text;
globalvar.REP = repTxt.Text;
if (string.IsNullOrWhiteSpace(dirTxt.Text))
MessageBox.Show("Please Key in a Directory");
else if (globalvar.FIL == String.Empty)
MessageBox.Show("Please give a file name");
else
{
try
{
if (filesCheckList.CheckedItems.Count != 0)
{
for (int x = 0; x <= filesCheckList.CheckedItems.Count - 1; x++)
{
globalvar.fName = filesCheckList.CheckedItems[x].ToString();
DirectoryInfo mydir = new DirectoryInfo(globalvar.DIR);
//DirectoryInfo[] directories = mydir.GetDirectories(".", SearchOption.TopDirectoryOnly);
FileInfo[] filesx = mydir.GetFiles(".", SearchOption.AllDirectories);
FileInfo[] f = mydir.GetFiles();
foreach (FileInfo file in filesx)
{
//try
{
if (file.Name == globalvar.fName)
{
if (file.Name != "History.txt")
File.Move(file.FullName, file.FullName.ToString().Replace(globalvar.FIL, globalvar.REP));
}
}
/*****************************
globalvar.DIR = dirTxt.Text;
DirectoryInfo mydir = new DirectoryInfo(globalvar.DIR);
FileInfo[] filesx = mydir.GetFiles(".", SearchOption.AllDirectories);
FileInfo[] f = mydir.GetFiles();
filesCheckList.Items.Clear();
foreach (FileInfo file in filesx)
{
if (file.Name != "History.txt")
filesCheckList.Items.Add(file.Name);
}
* */
/* catch (IOException)
{
MessageBox.Show("File names cannot be the same in the same folder");
MessageBox.Show("File name cannot be empty");
}
catch (ArgumentException)
{
MessageBox.Show("Cannot contain symbols/\\ : * ? < > | \" \n File name cannot be con");
}*/
}
}
}
}
catch (ArgumentNullException)
{
MessageBox.Show("Please key in a directory");
}
//if (File.Exists(globalvar.DIR + @"\History.txt"))
try
{
string content = File.ReadAllText(globalvar.DIR + @"\History.txt");
File.WriteAllText(globalvar.DIR + @"\History.txt", String.Empty);
/* using (System.IO.StreamWriter files = new System.IO.StreamWriter(globalvar.DIR + @"\History.txt", true))
{
files.WriteLine("For multiple files:");
files.WriteLine("Changed " + "\"" + globalvar.FIL + "\"" + " to " + "\"" + globalvar.REP + "\"");
DirectoryInfo mydir = new DirectoryInfo(globalvar.DIR);
FileInfo[] f = mydir.GetFiles();
globalvar.clear = 1;
foreach (FileInfo file in f)
{
if (file.Name != "History.txt")
files.WriteLine(file.Name);
}
for (int x = 0; x <= filesCheckList.CheckedItems.Count - 1; x++)
{
files.WriteLine("in " + filesCheckList.CheckedItems[x].ToString() + "\n");
}
files.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), DateTime.Now.ToLongDateString());
files.WriteLine("\n");
files.WriteLine(content);
} */
}
catch (FileNotFoundException)
{
using (System.IO.StreamWriter files = File.CreateText(globalvar.DIR + @"\History.txt"))
{
files.WriteLine("For multiple files:");
files.WriteLine("Changed " + "\"" + globalvar.FIL + "\"" + " to " + "\"" + globalvar.REP + "\"");
files.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), DateTime.Now.ToLongDateString());
files.WriteLine("\n");
}
}
MessageBox.Show("Your selected files have been changed");
}
}
private void cancelButton_Click(object sender, EventArgs e)
{
this.Close();
}
public static class globalvar
{
public static string DIR;
public static string FIL;
public static string REP;
public static string OPT;
public static string fName;
public static int clear = 0;
public static int proceed = 0;
public static int filpro = 0;
public static int cignm = 0;
public static int mngic = 0;
}
private void browseButton_Click(object sender, EventArgs e)
{
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
dirTxt.Text = folderBrowserDialog1.SelectedPath;
}
private void shfilButton_Click(object sender, EventArgs e)
{
applyButton.Enabled = true;
try
{
globalvar.DIR = dirTxt.Text;
DirectoryInfo mydir = new DirectoryInfo(globalvar.DIR);
FileInfo[] filesx = mydir.GetFiles(".", SearchOption.AllDirectories);
FileInfo[] f = mydir.GetFiles();
filesCheckList.Items.Clear();
foreach (FileInfo file in filesx)
{
if (file.Name != "History.txt")
filesCheckList.Items.Add(file.Name);
}
}
catch (DirectoryNotFoundException)
{
MessageBox.Show("Directory not found");
}
catch (ArgumentException)
{
MessageBox.Show("Directory not found");
}
catch (IOException)
{
MessageBox.Show("Directory is invalid");
}
}
private void filChk_CheckedChanged(object sender, EventArgs e)
{
if (filChk.Checked)
{
for (int i = 0; i < filesCheckList.Items.Count; i++)
{
filesCheckList.SetItemChecked(i, true);
}
}
else
{
for (int i = 0; i < filesCheckList.Items.Count; i++)
{
filesCheckList.SetItemChecked(i, false);
}
}
}
private void dirTxt_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
try
{
globalvar.DIR = dirTxt.Text;
DirectoryInfo mydir = new DirectoryInfo(globalvar.DIR);
FileInfo[] f = mydir.GetFiles();
globalvar.clear = 1;
filesCheckList.Items.Clear();
foreach (FileInfo file in f)
{
if (file.Name != "History.txt")
filesCheckList.Items.Add(file.Name);
}
}
catch (DirectoryNotFoundException)
{
MessageBox.Show("Directory not found");
}
catch (ArgumentException)
{
MessageBox.Show("Directory not found");
}
catch (IOException)
{
MessageBox.Show("Directory is invalid");
}
}
}
private void dirTxt_TextChanged(object sender, EventArgs e)
{
}
}
}
做任何回答的帮助? – ad1Dima
非常感谢大家的建议!我使用了Ouarzy的理论并修改了ad1Dima的方法,并提出了以下内容: –
File.Move(file.FullName,file.Directory.FullName.ToString()+“/”+ file.Name.ToString()。Replace(globalvar。 FIL,globalvar.REP)); –