Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么它会生成更新的文件,而不是正确地移动副本? private void按钮4\u单击(对象发送者,事件参数e) { FileStream outputFileStream=newfilestream(“log.txt”,FileMode.Create,FileAccess.Write); StreamWriter writer=新的StreamWriter(outputFileStream); //书写块 字符串originalPathFile=@“C:\Users\user\Downloads\CaptchaCollection\Small\”; 字符串duplicatePath=@“C:\Users\user\Downloads\CaptchaCollection\Small\Duplicates\”; 字符串movedOriginal=@“C:\Users\user\Downloads\CaptchaCollection\Small\Sorted\”; var files=Directory.GetFiles(originalPathFile) .Select(nameWithExtension=>Path.GetFileNameWithoutExtension(nameWithExtension)) .Where(name=>{int number;返回int.TryParse(name,out number);}) .Select(name=>int.Parse(name)) .OrderBy(number=>number).ToArray(); while(files.Length>1) { 字符串DuplicateOffFolder=Directory.CreateDirectory(duplicatePath+文件[0].ToString()).FullName; 对于(int j=1;jPath.GetFileNameWithoutExtension(nameWithExtension)) .Where(name=>{int number;返回int.TryParse(name,out number);}) .Select(name=>int.Parse(name)) .OrderBy(number=>number).ToArray(); } writer.Close(); outputFileStream.Close(); }_C#_File_Create Directory - Fatal编程技术网

C# 为什么它会生成更新的文件,而不是正确地移动副本? private void按钮4\u单击(对象发送者,事件参数e) { FileStream outputFileStream=newfilestream(“log.txt”,FileMode.Create,FileAccess.Write); StreamWriter writer=新的StreamWriter(outputFileStream); //书写块 字符串originalPathFile=@“C:\Users\user\Downloads\CaptchaCollection\Small\”; 字符串duplicatePath=@“C:\Users\user\Downloads\CaptchaCollection\Small\Duplicates\”; 字符串movedOriginal=@“C:\Users\user\Downloads\CaptchaCollection\Small\Sorted\”; var files=Directory.GetFiles(originalPathFile) .Select(nameWithExtension=>Path.GetFileNameWithoutExtension(nameWithExtension)) .Where(name=>{int number;返回int.TryParse(name,out number);}) .Select(name=>int.Parse(name)) .OrderBy(number=>number).ToArray(); while(files.Length>1) { 字符串DuplicateOffFolder=Directory.CreateDirectory(duplicatePath+文件[0].ToString()).FullName; 对于(int j=1;jPath.GetFileNameWithoutExtension(nameWithExtension)) .Where(name=>{int number;返回int.TryParse(name,out number);}) .Select(name=>int.Parse(name)) .OrderBy(number=>number).ToArray(); } writer.Close(); outputFileStream.Close(); }

C# 为什么它会生成更新的文件,而不是正确地移动副本? private void按钮4\u单击(对象发送者,事件参数e) { FileStream outputFileStream=newfilestream(“log.txt”,FileMode.Create,FileAccess.Write); StreamWriter writer=新的StreamWriter(outputFileStream); //书写块 字符串originalPathFile=@“C:\Users\user\Downloads\CaptchaCollection\Small\”; 字符串duplicatePath=@“C:\Users\user\Downloads\CaptchaCollection\Small\Duplicates\”; 字符串movedOriginal=@“C:\Users\user\Downloads\CaptchaCollection\Small\Sorted\”; var files=Directory.GetFiles(originalPathFile) .Select(nameWithExtension=>Path.GetFileNameWithoutExtension(nameWithExtension)) .Where(name=>{int number;返回int.TryParse(name,out number);}) .Select(name=>int.Parse(name)) .OrderBy(number=>number).ToArray(); while(files.Length>1) { 字符串DuplicateOffFolder=Directory.CreateDirectory(duplicatePath+文件[0].ToString()).FullName; 对于(int j=1;jPath.GetFileNameWithoutExtension(nameWithExtension)) .Where(name=>{int number;返回int.TryParse(name,out number);}) .Select(name=>int.Parse(name)) .OrderBy(number=>number).ToArray(); } writer.Close(); outputFileStream.Close(); },c#,file,create-directory,C#,File,Create Directory,所以这个按钮基本上在视觉上移动图像的复制文件。我从我之前问过的一个问题中得到了这个代码。现在我想使用一个新文件夹来放置特定图像的副本 例如: 1.png有5个视觉副本(65.png、87.png、100.png、103.png、156.png)。我想将所有副本移动到此目录,而不是将其放在duplicates目录:C:\Users\user\Downloads\CaptchaCollection\Small\duplicates\1\ 现在发生的是,它显然正在重命名和重新生成一些图像。我无法用语言

所以这个按钮基本上在视觉上移动图像的复制文件。我从我之前问过的一个问题中得到了这个代码。现在我想使用一个新文件夹来放置特定图像的副本

例如: 1.png有5个视觉副本(65.png、87.png、100.png、103.png、156.png)。我想将所有副本移动到此目录,而不是将其放在
duplicates
目录:
C:\Users\user\Downloads\CaptchaCollection\Small\duplicates\1\

现在发生的是,它显然正在重命名和重新生成一些图像。我无法用语言来描述这一点,因为我看不出到底发生了什么。没有发生的是,这些文件没有被移动到重复文件组织的目录中


文件夹将创建,但它没有将其放在正确的文件夹中。

如果我正确理解您的要求,那么我认为问题在于以下几行

private void button4_Click(object sender, EventArgs e)
{
    FileStream outputFileStream = new FileStream("log.txt", FileMode.Create, FileAccess.Write);
    StreamWriter writer = new StreamWriter(outputFileStream);

    // writing block

    string originalPathFile = @"C:\Users\user\Downloads\CaptchaCollection\Small\";
    string duplicatePath = @"C:\Users\user\Downloads\CaptchaCollection\Small\Duplicates\";
    string movedOriginal = @"C:\Users\user\Downloads\CaptchaCollection\Small\Sorted\";

    var files = Directory.GetFiles(originalPathFile)
                            .Select(nameWithExtension => Path.GetFileNameWithoutExtension(nameWithExtension))
                            .Where(name => { int number; return int.TryParse(name, out number); })
                            .Select(name => int.Parse(name))
                            .OrderBy(number => number).ToArray();

    while (files.Length > 1)
    {
        string duplicateOfFolder = Directory.CreateDirectory(duplicatePath + files[0].ToString()).FullName;

        for (int j = 1; j < files.Length; j++)
        {
            Bitmap im1 = new Bitmap(originalPathFile + files[0].ToString() + ".png");
            Bitmap im2 = new Bitmap(originalPathFile + files[j].ToString() + ".png");

            if (compare(im1, im2))
            {
                File.Move(originalPathFile + files[j].ToString() + ".png", duplicateOfFolder + files[j].ToString() + ".png");
                writer.WriteLine(files[j].ToString() + ".png" + " is a duplicate of " + files[0].ToString() + ".png \n");
            }
        }

        File.Move(originalPathFile + files[0].ToString() + ".png", movedOriginal + files[0].ToString() + ".png");
        writer.WriteLine(files[0].ToString() + ".png " + "has had its duplicates removed.");

        files = Directory.GetFiles(originalPathFile)
                            .Select(nameWithExtension => Path.GetFileNameWithoutExtension(nameWithExtension))
                            .Where(name => { int number; return int.TryParse(name, out number); })
                            .Select(name => int.Parse(name))
                            .OrderBy(number => number).ToArray();
    }

    writer.Close();
    outputFileStream.Close();
}
实际上,您正在将第一个文件与其他文件进行比较,但仍在复制重复文件夹中的文件

替换以下行

if (compare(im1, im2))
{
    File.Move(originalPathFile + files[j].ToString() + ".png", duplicateOfFolder + files[j].ToString() + ".png");
    writer.WriteLine(files[j].ToString() + ".png" + " is a duplicate of " + files[0].ToString() + ".png \n");
}


这应该行。

要将5个同名“1.png”的文件复制到同一个目录中吗?这就是你说的吗?@TMcKeown是的,没错。嗯,它们是用不同的名字复制的。我不明白你的答案。你知道目录中的每个文件都必须有一个唯一的名称,对吗?@TMcKeown你是什么意思?当我检查每个原始文件时,名称会更改。因此,如果我转到
2.png
并找到3个副本,它将移动并创建一个名为
2
的新文件夹。因此,基本上它是使用外循环根据“原始”图像名称生成文件的。如果您转到
2.png
并找到3个副本,然后创建一个名为
2
的新文件夹,您仍然无法将3个名为
2.png
的文件放在该文件夹中。您具体想对这3个重复文件做什么?我应该将原始文件的重复文件移动到创建的新文件夹中,而不是原始文件。只检查了编辑,但找不到目录:(我已经编辑了我的答案。您忘记在duplicates文件夹中创建具有原始文件名的子文件夹。这应该是问题的原因。您应该在移动文件之前创建目录。我还添加了创建目录的代码并修改了答案。您需要在调试器中签入,数组中存储的文件名是什么你们从linq查询中得到了什么。否则我建议的代码看起来还可以。
File.Move(originalPathFile + files[j].ToString() + ".png", duplicateOfFolder + files[j].ToString() + ".png");
String path = duplicateOfFolder;
if (!Directory.Exists(path)) 
{
   Directory.CreateDirectory(path);
}

File.Move(originalPathFile + files[j].ToString() + ".png", path + "\\" + files[j].ToString() + ".png");