[c#] map met pdf-bestanden hernoemen met array

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • killerflappy
  • Registratie: Februari 2002
  • Laatst online: 29-08-2021
Ik heb een directory met duizenden pdf-bestanden die ik automatisch wil hernoemen via een klein programma in C#. Het gaat om een eenmalige hernoeming zonder tussenkomst van een gebruiker.

Het programma leest een CSV-bestand. In de eerste kolom staat de oude naam en tweede kolom de nieuwe naam. De oude naam bestaat uit cijfers en .pdf De nieuwe naam bestaand uit cijfers-letters-tekens en .pdf

Via onderstaande code heb ik het CSV-bestand ingelezen en getoond in een datagrid. Nu wil ik de bestanden gaan hernoemen, maar ik heb geen idee hoe ik het path met pdf-bestanden aanwijs en zorg dat ze hernoemt worden. Zelf denk ik dat ik dit bij "else" moet doen met iets van File.Move

Ik heb gezocht en verschillende code getest. Ik ben nog een beginner.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace VerplaatsenEnHernoemen
{
    public partial class Form1 : Form
    {

        DataGridView my_datagridview = new DataGridView();
        DataTable my_datatable = new DataTable();

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            this.Size = new Size(750, 500);
            my_datagridview.Size = new Size(600, 400);
            my_datagridview.Location = new Point(5, 5);

            string[] raw_text = System.IO.File.ReadAllLines("D:\\names.csv");
            string[] data_col = null;
            int x = 0;
            foreach (string text_line in raw_text)
            {
                data_col = text_line.Split(';');
                    if  (x == 0)
                {
                    for (int i =0;i<=data_col.Count() -1; i++)
                    {
                        my_datatable.Columns.Add(data_col[i]);
                    }
                    x++;
                }
                else
                {
                    my_datatable.Rows.Add(data_col);
                }
            }
            my_datagridview.DataSource = my_datatable;
            this.Controls.Add(my_datagridview);


        }


    }
}

Acties:
  • 0 Henk 'm!

  • reallity
  • Registratie: Februari 2012
  • Laatst online: 05-09 08:53
Hoe heb je ze in de CSV file gekregen? Zelf alle duizenden files erin verwerkt?

Zit er een patroon in de oude filename en huidige filename? Of ga je die handmatig verwerken in jouw CSV bestand.

Als je van de oude filename een nieuwe filename kan maken (met code), dan kan je ook wel een C# programma schrijven die de files uit de directory parsed en dan deze hernoemt.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
killerflappy schreef op maandag 6 februari 2017 @ 09:39:
Zelf denk ik dat ik dit bij "else" moet doen met iets van File.Move
Als je zo'n vemoeden hebt dan duik je toch even de documentatie in? En vervolgens kijk je of dat overeenkomt met je verwachtingen... Wat je waarschijnlijk ook gaat nodig hebben is Path.Combine()

Overigens lijkt de "else" me niet de meest geschikte plek om dat te doen; het lijkt me dat je ergens een knop in je GUI wil hebben waarop je klikt om de rename-actie te starten.
killerflappy schreef op maandag 6 februari 2017 @ 09:39:
Ik heb gezocht en verschillende code getest.
Laat eens zien wat je hebt getest dan? En wat werkte er dan niet? Welke foutmelding(en) kreeg je?

[ Voor 9% gewijzigd door RobIII op 06-02-2017 10:39 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • killerflappy
  • Registratie: Februari 2002
  • Laatst online: 29-08-2021
reallity schreef op maandag 6 februari 2017 @ 10:37:
Hoe heb je ze in de CSV file gekregen? Zelf alle duizenden files erin verwerkt?

Zit er een patroon in de oude filename en huidige filename? Of ga je die handmatig verwerken in jouw CSV bestand.

Als je van de oude filename een nieuwe filename kan maken (met code), dan kan je ook wel een C# programma schrijven die de files uit de directory parsed en dan deze hernoemt.
De csv -file heb ik gemaakt in Excel. Alle oude en nieuwe namen zijn hierin aanwezig.
Deze wordt netjes ingelezen en getoond via het datagridview.

Maar omdat ik een newbie ben op het gebied van programmeren lukt het niet de naamswijziging door te voeren. Ik heb gelezen en geprobeerd. Elke keer als ik denk dat ik het snap, dan lukt het toch niet.

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 17:13

gorgi_19

Kruimeltjes zijn weer op :9

killerflappy schreef op maandag 6 februari 2017 @ 10:42:
[...]
Maar omdat ik een newbie ben op het gebied van programmeren lukt het niet de naamswijziging door te voeren. Ik heb gelezen en geprobeerd. Elke keer als ik denk dat ik het snap, dan lukt het toch niet.
Laat eens een stukje zien? :)

Buiten dit; ik vermoed dat je links als http://stackoverflow.com/...w-to-rename-a-file-in-net ook bent tegengekomen en hebt uitgeprobeerd.

Wat werkte niet in jouw situatie? Wat was het effect wat anders was?

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • +1 Henk 'm!

  • MSteverink
  • Registratie: Juni 2004
  • Laatst online: 24-09 15:32
Maar waarom zo omslachtig?

Je hebt de oude en de nieuwe bestandsnaam al in een tekstbestand. Als je daar alleen, voor iedere regel, rename voor zet krijg je een hele reeks van DOS-opdrachtregels, oftewel een batchbestand.

Acties:
  • 0 Henk 'm!

  • killerflappy
  • Registratie: Februari 2002
  • Laatst online: 29-08-2021
MSteverink schreef op maandag 6 februari 2017 @ 10:50:
Maar waarom zo omslachtig?

Je hebt de oude en de nieuwe bestandsnaam al in een tekstbestand. Als je daar alleen, voor iedere regel, rename voor zet krijg je een hele reekst van DOS-opdrachtrgels, oftewel een batchbestand.
|:( inderdaad. pfff. Dit is mijn eerste C# gebruik. Vandaar dat ik dit met c# wilde oplossen en blind was geworden voor de oplossing in een batch-file.

Bedankt voor de snelle oplossing. Toch ga ik het ook nog even via C# proberen, zodat ik er wat van leer.

Acties:
  • +1 Henk 'm!

  • Killah_Priest
  • Registratie: Augustus 2001
  • Nu online
Om heel eerlijk te zijn : voor dit soort éénmalige taken is Powershell juist perfect.
Afhankelijk van de opbouw van je CSV zou je met de volgende code een rename kunnen doen :

PowerShell:
1
2
3
4
5
$CSV = Import-Csv -Path C:\test\csvfile.csv
foreach ($Entry in $CSV)
    {
        Rename-Item -Path $Entry.OldName -NewName $Entry.NewName
    }


(dit voorbeeld gaat uit van 2 kolommen in je CSV file, 1 genaamd OldName en 1 genaamd NewName)
Pagina: 1