string fName = Path.GetFileName(tempPaths[z]);
if (!File.Exists(subAch + fName))
{
File.Move(tempPaths[z], subAch + fName);
Console.WriteLine("moved!!! from " + tempPaths[z] + " tooooo ");
}
tempPaths是包含所有图像文件路径的列表。例如./images/image4.jpg
subAch是一个目录字符串。
我希望获取文件的文件名,然后将它们移动到另一个目录。但是上面的代码我不断收到错误:其他进程正在使用文件。
无论如何都有获取文件名并移动它们的?我尝试过fileStream,但对此感到困惑。
请建议。
谢谢!
答案 0 :(得分:2)
您的代码应该可以正常工作。你只需要找出锁定文件的人。 我将代码放在try-catch块中的if-block中来处理锁定的文件。 我还建议你使用Path.Combine而不是dir + file。
一件事:您正在检查subAch + tempPaths [z]是否存在,但您正在复制到其他位置; subAch + fName。
答案 1 :(得分:0)
另一个进程正在使用文件意味着。某人/某事已经在使用该文件,因此无法移动它。你总能捕捉错误并移动其他一切吗?
答案 2 :(得分:0)
我使用非理想的方式获取文件名并将文件移到另一个地方。
tempPaths.AddRange(Directory.GetFiles(rawStorePath, filter, SearchOption.AllDirectories));
上面的代码获取文件夹集中所有文件的所有目录。结果是这样的。 tempPaths是一个List。
"./images/glass_numbers_5.jpg"
"./images/G.JPG"
"./images/E.JPG"
"./images/F.JPG"
"./images/glass_numbers_0.jpg"
"./images/C.JPG"
"./images/B.JPG"
"./images/A.JPG"
"./images/D.JPG"
"./images/glass_numbers_7.jpg"
然后我使用循环来获取文件名。
for (int i = 0; i < tempPaths.Count; i++)
{
//Getting the original names of the images
int pLength = rawStorePath.Length;
string something = tempPaths[i].Remove(0, pLength);
if (!_tfileName.ContainsKey(tempPaths[i]))
{ _tfileName.Add(tempPaths[i], something); }
}
rawStorePath是目标路径的路径,例如:./ images / tempPath [i]例如:./ images / G.JPG
所以用长度我删除字母并取回文件名。
如果有的话,请告诉我一个理想的方法。
谢谢!