Domanda

Ho un programma che devo eseguire su * nix e windows. poiché il programma prende i percorsi dei file dai file, il problema è cosa fare riguardo al problema \ vs / .

Il mio pensiero attuale è quello di inserire una regex che converta quella sbagliata in quella giusta a seconda del sistema in cui mi trovo. Ciò avrà l'effetto di far funzionare entrambi i tipi su entrambi i sistemi. A parte il fatto che ora ho due problemi , qualcuno vede qualcosa altri problemi?

(Altre soluzioni migliori sono più che benvenute)

Modifica: il problema principale è far funzionare i percorsi di Windows su Unix anziché viceversa.

È stato utile?

Soluzione

Il / è completamente supportato anche in win32.

Vedi anche questa domanda correlata

Altri suggerimenti

Windows accetterà generalmente \ o /, quindi la standardizzazione su / potrebbe rendere il problema più semplice fintanto che avrai il controllo completo sui nomi dei file.

Hai pensato di creare un " file manager " classe che gestirà tutti i problemi di percorso dei file per te? In questo modo nella tua applicazione di posta, quando carichi un file di dati, puoi chiamare qualcosa del genere.

LoadApplicationData(FileManager.GetDataFilePath)

Quindi il tuo gestore file rileverà l'ambiente in cui si trova e restituirà l'opzione del percorso file corretta. In questo modo puoi anche soddisfare gli standard di localizzazione Win32 vs. Unix (come Program Files vs / usr o qualunque altra cosa).

Nota che i percorsi di Win32 sono complessi se consideri le lettere di unità (nessun analogo su Unix) e le speciali 'forcelle' (termine pre-X di MacOS - allo stesso modo nessun analogo su Unix in generale, sebbene MacOS X le abbia - sorpresa, sorpresa ) che può essere fornito. Stai attento.

Crea un parser per l'input per creare una struttura ad albero di nodi che rappresentano le directory. Quindi puoi 'salvare' camminando sull'albero e scrivendo qualsiasi delimitatore tu voglia o facoltativamente facendo cose diverse, come controllare se esiste la directory o scrivere meta file. Questo è in realtà qualcosa che sto pensando ora sarebbe utile per la mia applicazione :-)

Non hai detto quale lingua stai usando, quindi assumerò egoisticamente c / c ++. boost , se sei disposto a usarlo, ha un libreria del filesystem . Naturalmente, se stai usando un linguaggio dinamico, probabilmente ci sono già librerie di astrazione di FS (ad es. In perl, File :: Spec è abbastanza standard).

Non ci hai detto da che tipo di file stai leggendo i percorsi. Presumo che siano file di configurazione. In tal caso, ci sono molti modi, IMHO la risposta corretta è progettare il tuo programma per evitare di manipolare i percorsi, se possibile. Ho pubblicato una risposta qui: https://stackoverflow.com/a/40980510/2345997 che è pertinente.

modi:

  1. Aggiungi un'opzione da riga di comando che consente a un utente di specificare il percorso in questione invece di leggerlo da un file di configurazione.
  2. Aggiungi un'opzione della riga di comando in modo che l'utente possa specificare un percorso di base. I percorsi nel file di configurazione verranno interpretati come situati in questo percorso di base.
  3. Dividi il tuo file di configurazione in tre. Un file avrà una configurazione multipiattaforma, un altro file avrà una configurazione solo Windows e un file finale avrà una configurazione solo Linux. Quindi l'utente può specificare il percorso corretto per Windows e Linux. Su Windows il tuo programma leggerà il file di configurazione multipiattaforma e il file di configurazione di Windows. Su Linux leggerà il file multipiattaforma e il solo file di configurazione di Linux.
  4. Aggiungi preelaborazione all'analisi del file di configurazione. Ciò ti consentirà di avere un file di configurazione in cui l'utente può fare in modo che il tuo programma ignori alcune delle righe del file a seconda del sistema operativo su cui il programma è in esecuzione. Pertanto, l'utente sarà in grado di specificare due volte il percorso del file. Una volta per Linux e una volta per Windows.
  5. Cambia il design in modo che i file si trovino sempre nella stessa directory del tuo eseguibile - quindi l'utente specifica solo i nomi dei file nel file di configurazione anziché i percorsi dei file.
  6. Utilizza una semplice funzione che commuta " / " a " \ " ;. Quindi documentare all'utente che devono specificare i percorsi come percorsi Linux e questa trasformazione verrà applicata per Windows.
  7. Crea il tuo mini-percorso per questo e documentalo all'utente. Ad es .: " / " - specifica un separatore di directory, {root} - si espande nella radice del filesystem, {cwd} - si espande nella directory corrente, {app} - si espande nel percorso della propria applicazione ecc ... Quindi l'utente può specificare i percorsi dei file come: {root} /myfiles/bob.txt su entrambe le piattaforme.
  8. Alcuni percorsi funzioneranno su entrambe le piattaforme. Ad esempio: percorsi relativi come ../my files / bill.txt. Limitare l'applicazione affinché funzioni solo con questi percorsi. Documentare questa limitazione e come l'applicazione gestisce i percorsi per l'utente.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top