5 Stimmen

Übergeordnetes Verzeichnis einer Datei

Gibt es eine Möglichkeit, das übergeordnete Verzeichnis einer Datei mit einem C-Programm herauszufinden? Ich möchte der Datei die gleichen Berechtigungen geben, die das Verzeichnis hat. Um dies zu tun, möchte ich das übergeordnete Verzeichnis der Datei kennen. Für jede Hilfe bin ich dankbar.

1 Stimmen

Von String? Aus Dateideskriptor?

2 Stimmen

Eine Datei kann mehr als 1 übergeordnetes Verzeichnis haben: siehe man ln unter Linux, Verbindungspunkt oder was auch immer unter Windows ( mklink /? funktioniert auf meinem Windows Vista)

0 Stimmen

Wenn Sie ihm keine Rechte geben, erbt es die Rechte des Verzeichnisses.

4voto

Jonathan Punkte 12856

Wenn Sie den Pfad der Datei haben, können Sie ihn manuell ändern, indem Sie einen absoluten Pfad angeben, wenn er relativ ist (nicht mit einem / unter Unix, oder ein letter:\ o \ o letter:/ o / unter Windows) und dann an Dateitrennzeichen aufteilen ( / o \ ), aber mir ist keine eingebaute Funktion bekannt, die all dies für Sie erledigt.

T basename y dirname Funktionen können helfen, aber Sie müssen selbst genug über den Pfad der Datei herausfinden, da sie nur mit Zeichenketten arbeiten; sie fragen das Dateisystem nicht ab.

4voto

thkala Punkte 80165

Es ist nicht garantiert, dass es Die richtige Sache aber haben Sie eine der folgenden Möglichkeiten ausprobiert?

  • Wenn Ihr Dateiname ein Pfad-Trennzeichen enthält (z. B. / unter Unix, \ unter Windows), kopieren Sie die Zeichenfolge z. B. mit strdup() und ersetzen Sie das letzte Vorkommen des Pfadseparators (z. B. mit strrchr() ) mit einem Null-/Nullzeichen. Die resultierende Zeichenkette ist das übergeordnete Verzeichnis Ihrer Datei.

  • Wenn kein Pfadseparator vorhanden ist, befindet sich die Datei in Ihrem aktuellen Arbeitsverzeichnis. Haben Sie versucht, einfach mit . ? Die . y .. Links funktionieren sowohl unter Unix als auch unter Windows.

Es gibt eine ganze Reihe von Eckfällen (z.B. die Frage, was mit der Datei /hello.txt ?), aber es sollte ein Anfang sein.

2voto

Friedrich Punkte 5828

Eine solche Funktion gibt es in Standard C nicht. Sie können Ihr Glück unter Windows mit GetFullPathName

und dann vielleicht _splitpath

Aber so wie es geschrieben ist, gibt es keine Standardfunktion, um solche Dinge zu tun.

0voto

Cloud Cho Punkte 1242

Ich habe ein C-Sprachfragment mit Codes aus cplusplus-Webseite , Goz's Antwort y thkala's Antwort .

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdbool.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <time.h>
.
.
.
    out_file_name = "c:/Users/Documents/output/test.txt";
    const char ch = '/'; 
    char* rest;
    int loc; 
    char letter;
    char* pointer_to_loc; 

    // Current directory
    rest = strrchr(out_file_name, ch);
    // Just make sure there is a directory
    if (rest != NULL) {
        pointer_to_loc = strrchr(out_file_name, ch);  # Pointer to last / symbol
        loc = rest - out_file_name + 1;
        char subbuff[loc]; # string for truncated string
        loc--;
        memcpy( subbuff, &out_file_name[0], loc ); # copy section of string
        subbuff[loc] = '\0';

        // Parent directory, now input is current directory from previous section
        rest = strrchr(subbuff, ch);
        if (rest != NULL) {
            loc = rest - subbuff + 1;
            char subsubbuff[loc];
            loc--;
            memcpy( subsubbuff, &subbuff[0], loc );
            subsubbuff[loc] = '\0';

            printf (subsubbuff); // Parent directory
            printf ("\n");
        }
        printf (subbuff); // Current directory
        printf ("\n");
    }
    printf (output_file_name); // Entire path to file

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X