Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Dateinamen umbennen

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
30.10.2002, 09:55 Uhr
~rasty
Gast


Hi!
Ich habe mit dem MFC-Assistenten eine exe erstellt, die mir aus einem Excel-File Daten ausliest!
Soweit funktioniert alles!

Jetzt würde ich gerne die Daten mit den Filenamen einiger Dateien auf meinem PC vergleichen und wenn diese übereinstimmen die Dateien umbennen.

(Z.B.: Aus Excel eingelesen: "Test"
Dateiname in C:\Daten\ : "Test.txt"
>> Datei umbennen in "Test-Excel.txt")

Hab schon einiges ausprobiert und auch schon viel nachgelesen, aber leider noch nicht die richtige Lösung gefunden!

Ich hoffe, dass mir hier jemand weiterhalfen kann!

Danke schon mal!

M.f.G. rasty

Dieser Post wurde am 30.10.2002 um 11:19 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.10.2002, 11:16 Uhr
void*
Generic Pointer
(Operator)


Hallo!

Ganz einfach:


C++:
int rename( const char *oldname, const char *newname );


aus <stdio.h>

Gruß
void*
--
Gruß
void*
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.10.2002, 11:47 Uhr
Tommix



Hallo,
oder auch (mehr MFCisch)

C++:
CString oldName = "C:\\Daten\\Test.txt";
CString newName = "C:\\Daten\\Test-Excel.txt";
    
try
{
    CFile::Rename(oldName, newName);      
}
catch(CFileException* pException)
{
    AfxMessageBox("Fehler beim umbenennen der Datei.", MB_ICONERROR);

    pException->Delete();
}



Gruß, Tommix
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.10.2002, 11:57 Uhr
~rasty
Gast


Soweit so gut!
Das funktioniert!
Aber das Problem ist jetzt noch, dass in meinem Verzeichnis mehrere Files sind
die im Falle der übereinstimmung umbennant werden müssen.

Ich müsste sozusagen die Namen der Dateien in diesem Ordner nacheinander
in einen String einlesen, dann vergleichen, und dann umbennen.

Hab schon viel mit 'GetFileName' und so probiert, aber das funktioniert nicht.
Zumindest nicht so wie ich es mach!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.10.2002, 12:59 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Hallo:


C++:
CFileFind Find;
BOOL bFind = Find.FindFile("c:\\daten\*",0);
while(bFind)
{
    bFind = Find.FindNextFile();
    CString strFilename = Find.GetFileName();
    if(strFilename == "Test.txt")
    {
        Rename(strFilename,"Excel-"+strFilename);
    }
}
Find.Close();


--
class God : public ChuckNorris { };

Dieser Post wurde am 30.10.2002 um 12:59 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.10.2002, 13:59 Uhr
~rasty
Gast


Danke für die Antwort!
Die Idee an sich ist super! Bei mir funktionierts aber wieder mal nicht!
strFilename hat bei mir nur den Wert: "."

Gehört in der zweiten Zeile bei der Pfadangabe nicht ein Doppelslash vor den Stern?
So spukt er mir eine Warnung aus und mit Doppelslash gehts auch nicht!

So sieht mein Quellcode aus:

C++:
CFileFind Find;
BOOL bFind = Find.FindFile("d:\\Daten\\Test\\*",0);
while(bFind)
{
   bFind = Find.FindNextFile();
   CString strFilename = Find.GetFileName();
   CString Test = ( strFilename.Left(6) );
   CString Endung = ( strFilename.Right(17) );

   if (m_Test == Test)
   {
      m_Test = m_pSet->m_Umbenannt;
      UpdateData(FALSE);

      //Umbennen der Files
      try
      {
          CFile::Rename(path+Test+Endung, path+m_Umbennant+Endung);    
      }
      catch(CFileException* pException)
      {
         AfxMessageBox("Fehler beim umbenennen der Datei.", MB_ICONERROR);
         pException->Delete();
      }
   }
}
Find.Close();



Was passt den da nicht?
Ich verstehs nicht!!!

Dieser Post wurde am 30.10.2002 um 22:36 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
30.10.2002, 14:29 Uhr
~rasty
Gast


Habs selbst herausgefunden!
Der Fehler lag in der zweiten Zeile.
Anstelle eines * muss ein *.txt stehn!

Danke an alle!

M.f.G. rasty
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
30.10.2002, 14:56 Uhr
Tommix



Hallo,
der Code ist an sich richtig. Vermutlich stimmt die Suchmaske nicht. Wenn ich recht verstehe, soll z.B. Test.txt -> Test-Excel.txt, Test.bmp -> Test-Excel.bmp umbenannt werden.


C++:
CString path = "D:\\Daten\\";
CString test = "Test";  // Test.* wird umbenannt im Ordner D:\Daten

CFileFind Find;
BOOL bFind = Find.FindFile(path+test+".*");
while(bFind)
{
    bFind = Find.FindNextFile();

    CString oldFilename = Find.GetFileName();
    CString extension =         oldFilename.Right(oldFilename.GetLength()-test.GetLength()-1);

    CString newFilename = test+"-Excel."+extension;
    
    //Umbennen der Files
    try
    {
        CFile::Rename(path+oldFilename, path+newFilename);    
    }
    catch(CFileException* pException)
    {
        AfxMessageBox("Fehler beim umbenennen der Datei.", MB_ICONERROR);
        pException->Delete();
    }
}
Find.Close();



Gruß, Tommix

- Da war ich wohl zu langsam ;)

Dieser Post wurde am 30.10.2002 um 14:57 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
30.10.2002, 22:38 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


Sorry da muss natürlich ein Doppelstrich hin sorry

achja um Endung rauszuschneiden gehts einfacher:


C++:
CString strFilename = Find.GetFileName();
CString strTitle = Find.GetFileTitle();
Cstring strEndung = strFilename.TrimLeft(strTitle+".");


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.11.2002, 12:10 Uhr
Tommix



Hallo,
kommt mal wieder reichlich spät, aber was solls - bevor einer (wie ich eben) verzweifelt versucht, die Worte des Master umzusetzen

Erstens müßte es wenn schon:

C++:
CString strFilename = Find.GetFileName();
CString strTitle = Find.GetFileTitle();
CString strEndung = strFilename;
strEndung.TrimLeft(strTitle+".");


heißen, aber das geht auch nicht, weil TrimLeft jeden einzelnen Buchstaben des Arguments entfernt (und nicht den String als Ganzes) :

C++:
CString strFilename = "testfile.txt";
CString strTitle = "testfile";
CString strEndung = strFilename;
strEndung.TrimLeft(strTitle+".");    // strEndung == "xt"



Gruß, Tommix

Dieser Post wurde am 06.11.2002 um 12:11 Uhr von Tommix editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: