Verknüpfung einer Datei
-
Guten Tag!
Nach langem googeln und vielen erfolglosen funden (welche einer weniger nützlich war als der vorherige) frag ich nun hier!
Ich arbeite im moment an einem Verwaltungsprogramm, genauer könnte man es auch als sortierungsprogramm bezeichnen.
Dessen aufgabe besteht darin, sämtliche dateien eines Typs zu finden, dateiname und Pfad zu speichern und eine verknüpfung zu diesen einzelnen dateien nach erstellungsdatum sortiert in einem speziell dafür angelegtem Verzeichnis zu speichern.
Das Projekt ist im moment so weit, das es sämtliche Musikdateien auf dem PC sucht, name/pfad/erstellungsdatum speichert und eben nach erstellungsdatum sortiert.
mein einziges problem: ich habe keinen plan, wie ich von einer Datei eine Verknüpfung erstellen kann. Wie kann ich sowas erreichen? Muss ich auf shell zugreifen? falls ja, wie und auf was genau? oder assembler (assambler? weiß nich genau wie man es schreibt)?
bin für hilfe sehr dankbar. und damit nicht kommt: zeig mal deine code her!
Ich habe nicht damit angefangen, weil ich wirklich nicht weiß wie es geht und mit irgendwelchen unnötigen dinge anfangen um dann arbeit für nichts getan zu haben und am schluss doch nichts zu erreichen ist unnötig. ich probiere wirklich alles aus, aber ich hab nicht mal nen anfangspunkt. wenn ich nicht weiß wo anfangen, so weiß ich auch nicht wie weiter. und vorab weiß ich auch nicht genau wo ich nach was suchen muss.ein zwei vorprogrammiere Beispiele wären ganz nett, vorab sie auch für mich fürs verständnis hilfreich wären.
Falls dies nicht in C zu verwirklichen ist, wäre ich auch für C++ lösungsvorschläge offen.
Mit freundlichen Grüßen
ITEDVO
-
ANSI C weiss nichtmal, was eine Verknüpfung ist. Unter Unixoiden hilft Dir entweder man 2 link oder man 2 symlink. Unter Windows gibt's sicher passende WINAPI-Funktionen.
-
Um Pfade und Dateien zu suchen musst du doch schon Betriebssystemfunktionen benutzt haben. An der gleichen Stelle findest du auch die Möglichkeit, Verknüpfungen zu erstellen.
-
itedvo schrieb:
Das Projekt ist im moment so weit, das es sämtliche Musikdateien auf dem PC sucht, name/pfad/erstellungsdatum speichert und eben nach erstellungsdatum sortiert.
...
Ich habe nicht damit angefangen, weil ich wirklich nicht weiß wie es geht und mit irgendwelchen unnötigen dinge anfangen um dann arbeit für nichts getan zu haben und am schluss doch nichts zu erreichen ist unnötig.
Wie jetzt?

-
Für Unix sollte
system("ln -s dateiname linkname");wohl reichen, für Windows weitaus komplizierter, z.B. Hilfsprogramm unter
http://mark.shepard.org/code/shlink/shlink.c
compilieren, und dann ähnlichsystem("shlink dateiname linkname");
-
Wutz schrieb:
Für Unix sollte
system(*facepalm*
-
danke schon mal für die hilfestellungen.
mit system(); zu arbeiten ist nicht gerade die feine art finde ich, zudem es immer eine constante verlangt, was ich jedoch nicht liefern kann, da ja nicht jeder computer die gleichen bezeichnungen bezüglich ordner hat (eigens angelegte ordner etc.) und schon gar nicht jeder die gleichen dateien auf dem pc hat. ich habe daher mit systemfunktionen aus windows.h etc. gearbeitet.
vor lauter systemfunktionen hab ich folgende funktion übersehen:
BOOLEAN WINAPI CreateSymbolicLink( __in LPTSTR lpSymlinkFileName, __in LPTSTR lpTargetFileName, __in DWORD dwFlags );http://msdn.microsoft.com/en-us/library/aa363866(VS.85).aspx
mit dieser sollte es gehen.
danke für die hilfestellung und den tipp die systemfunktionen noch ein mal anzuschauen!
@µngbd: ich glaub du hast mich falsch verstanden! Das projekt besteht aus verschiedenen programmen die schlussendlich zu einem programm zusammengesetzt werden. es ist alles fertig, ich habe lediglich nicht mit dem versuch begonnen dateien zu verknüpfen weil mir die funktion unbekannt war und ich mit system() nicht arbeiten möchte.

gruß
ITEDVO
-
itedvo schrieb:
mit system(); zu arbeiten ist nicht gerade die feine art finde ich
Finde ich auch.
itedvo schrieb:
zudem es immer eine constante verlangt, was ich jedoch nicht liefern kann, da ...
Man kann den Kommandostring aber auch zur Laufzeit zusammenbauen, dann sollte es prinzipiell gehen.
itedvo schrieb:
@µngbd: ich glaub du hast mich falsch verstanden!
...Das war Absicht.
Kennt eigentlich jemand eine ordentliche Bibliothek, die solche Datei-Operationen, die überall vorhanden sind, vom OS abstrahiert?

-
Dieser Thread wurde von Moderator/in rüdiger aus dem Forum ANSI C in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
ich kann dir deine frage leider nicht beantworten, da ich selber erst seit ein einhalb jahren programmiere (ich erlerne es an der HTBL Pinkafel in Österreich).
aber vieleicht kannst du mir eine frage beantworten

wie ich vorher gepostet habe, verlangt die funktion einen LPTSTR. doch ich programmiere mit Visual Studio 2008 und dieser gibt mir einen fehler aus. und zwar
'CreateSymbolicLinkW' : cannot convert parameter 1 from 'char [26]' to 'LPCWSTR'
aber verlangt ist doch LPTSTR, wieso will der jetzt in LPCWSTR umwandeln?
Beispiel:
int main(){ char pfad[MAX_DAT][MAX_LET]={ {"C:/BC5"}, {"C:/Users/ITEDVO/Desktop/"} }; CreateSymbolicLink(pfad[0],pfad[1],0x1); return 0;Oder mach ich in diesem beispiel (bis auf die tatsache das ich den Pfad nicht einlese, was ja absicht ist weil es ja nur ein beispiel ist xD) etwas falsch?
wäre für hilfe sehr dankbar!
gruß
ITEDVO
-
Du mußt Dein Projekt von UNICODE auf MBCS umstellen.
-
hmm, was ähnliches hat der prof. auch vorgeschlagen, doch ist die (bzw. meine) frage: wo? hab jetzt mal 20 min lang ungefär alle projekt-einstellungen durchsucht, aber ohne erfolg. wo kann ich das umstellen?
-
Project|Properties|Configuration Properties|General|Character Set: Use Multi-Byte Character Set
-
danke... jetzt gehts...
mir ist jedoch noch eine funktion aufgefallen, doch ist mein englisch anscheinend nicht gut genug um zu verstehen was der sinn der folgenden funktion ist.
BOOL WINAPI CreateHardLink( __in LPCTSTR lpFileName, __in LPCTSTR lpExistingFileName, __reserved LPSECURITY_ATTRIBUTES lpSecurityAttributes );http://msdn.microsoft.com/en-us/library/aa363860(v=VS.85).aspx
könnte mir jemand erklären was diese funktion jetzt wirklich macht? irgendwie steh ich auf der leitung.
gruß
ITEDVO
-
HardLink: Im Dateisystem wird einfach nur ein Zeiger auf den Inhalt der Datei gesetzt! Das löschen der ursprünglichen Datei löscht nicht den Inhalt, da ja noch ein weiterer Name auf den Inhalt zeigt.
SymLink: Wird die ursprungsdatei gelöscht, so ist der Inhalt weg und der SymLink geht ins Leere.
-
ah, gut zu wissen. aber ich hab nun ein problem!
wenn ich schreibe:
int main(){ char dat[MAX_FILES][MAX_LETTER]{ {"C:/BCW/BIN/BCW.exe"}, {"C:/Users/ITEDVO/Desktop/bcw.exe"} }; CreateSymbolicLink(dat[1],dat[2],0x0); return 0; }jetzt lässt sich aber die verknüpfung nicht ausführen. bei directories gehts jedoch!
was mach ich falsch?
-
Kannst DU uns mitteilen was DU mit "nicht ausführen" meinst? AUch wäre es gut wenn Du sowohl die Rückgabewerte prüfen würdest als auch Backslashes verwenden könntest...
-
Es wird folgende Fehlermeldung beim Ausführen der Verknüpfung (doppelklick auf die verknüpfung) ausgegeben:
C:\Users\ITEDVO\Desktop\BCW.exe
Der angegebene Pfad ist nicht vorhanden.Überprüfen Sie die Pfadangabe, und wiederholen Sie den Vorgang.
wie kann man ein bild hier im forum einfügen? weil dann kann ich euch ein paar
screenshots bezüglich dem problem senden.gruß
ITEDVO
-
Nun, die Fehlermeldung ist ganz klar zu verstehen.
Es gibt diesen Pfad nicht!
Oder diesen Dateinamen gibts in diesem Pfad nicht!Prüfe mal mit dem Explorer (oder Total Commander, ... ) ob Du überhaupt auf diesen Pfad zugreifen kannst!
Vielleicht gibt es auch ein Problem mit den User-Rechten?
Dann kann es durchaus passieren, daß der User keine Leserechte für diesen Ordner hat?HTH,
Martin
-
ich teste diese funktion auf meine arbeitslaptop mit adminrechten.
der pfad existiert und zugriffsrechte hab ich.