Question

J'ai un programme que je dois exécuter sous * nix et windows. comme le programme prend les chemins de fichiers dans les fichiers, le problème est de savoir comment procéder à propos de la question \ vs / .

Ma pensée actuelle est de mettre une expression régulière qui convertit le mauvais en le bon en fonction du système sur lequel je suis. Cela aura pour effet de laisser l'un ou l'autre type fonctionner sur l'un ou l'autre système. Outre le fait que , j'ai maintenant deux problèmes , est-ce que quelqu'un d'autres problèmes?

(D'autres meilleures solutions sont plus que bienvenues)

Éditer: le problème principal est de faire en sorte que les chemins de fenêtres fonctionnent sous unix plutôt que l’inverse.

Était-ce utile?

La solution

Le / est également entièrement supporté dans win32.

Voir également cette question connexe

Autres conseils

Windows accepte généralement soit \, soit / /. Par conséquent, la normalisation de / peut simplifier le problème tant que vous avez le contrôle total des noms de fichiers.

Avez-vous envisagé de créer un " gestionnaire de fichiers " classe qui va gérer tous les problèmes de chemin de fichier pour vous? Ainsi, dans votre application de messagerie, lorsque vous chargez un fichier de données, vous pouvez appeler quelque chose comme ceci.

LoadApplicationData(FileManager.GetDataFilePath)

Ensuite, votre gestionnaire de fichiers détectera l'environnement dans lequel il se trouve et renverra l'option de chemin de fichier appropriée. De cette façon, vous pouvez également vous adapter aux normes de localisation Win32 vs Unix (comme Program Files vs / usr ou autre).

Notez que les chemins Win32 sont complexes lorsque l’on considère les lettres de lecteur (pas d’analogue sous Unix) et les «fourches» spéciales (terme MacOS antérieur à X - de même qu’aucun analogue sous Unix en général, bien que MacOS X les ait - surprise, surprise ) qui peut être fourni. Soyez prudent.

Créez un analyseur syntaxique pour votre entrée afin de créer une arborescence de noeuds représentant des répertoires. Ensuite, vous pouvez «enregistrer» en parcourant l’arborescence et en écrivant les délimiteurs souhaités ou en effectuant éventuellement différentes opérations, telles que la vérification de l’existence du répertoire ou l’écriture de méta-fichiers. C’est en fait quelque chose qui, à mon avis, serait utile pour ma propre application: -)

Vous n’avez pas dit quelle langue vous utilisez, je vais donc assumer égoïstement c / c ++. boost , si vous souhaitez l'utiliser, a un bibliothèque du système de fichiers . Bien sûr, si vous utilisez un langage dynamique, les bibliothèques d’abstraction FS existent probablement également (par exemple en perl, File :: Spec est tout à fait standard).

Vous ne nous avez pas indiqué le type de fichiers à partir duquel vous lisez les chemins. Je vais supposer qu'il s'agit de fichiers de configuration. Dans ce cas, il y a plusieurs façons, à mon humble avis, la bonne réponse est de concevoir votre programme pour éviter de manipuler les chemins, si possible. J'ai posté une réponse ici: https://stackoverflow.com/a/40980510/2345997 qui est pertinente.

façons:

  1. Ajouter une option de ligne de commande permettant à un utilisateur de spécifier le chemin en question au lieu de le lire depuis un fichier de configuration.
  2. Ajoutez une option de ligne de commande pour permettre à l'utilisateur de spécifier un chemin de base. Les chemins du fichier de configuration seront interprétés comme situés sous ce chemin de base.
  3. Divisez votre fichier de configuration en trois. Un fichier aura une configuration multiplate-forme, un autre fichier aura une configuration uniquement Windows et un fichier final aura une configuration uniquement Linux. Ensuite, l'utilisateur peut spécifier le chemin correct pour Windows et Linux. Sous Windows, votre programme lira le fichier de configuration multiplate-forme et le fichier de configuration Windows uniquement. Sous Linux, le fichier multiplate-forme et le fichier de configuration Linux uniquement seront lus.
  4. Ajoutez le prétraitement à l'analyse de votre fichier de configuration. Cela vous permettra d’avoir un fichier de configuration dans lequel l’utilisateur peut faire en sorte que votre programme ignore certaines des lignes du fichier en fonction du système d’exploitation sur lequel le programme est exécuté. Par conséquent, l'utilisateur pourra spécifier le chemin d'accès au fichier deux fois. Une fois pour Linux et une fois pour Windows.
  5. Modifiez la conception de sorte que les fichiers se trouvent toujours dans le même répertoire que votre exécutable. Dans ce cas, l'utilisateur ne spécifie que les noms de fichier dans le fichier de configuration plutôt que les chemins d'accès aux fichiers.
  6. Utilisez une fonction simple qui bascule " / " à "\". Indiquez ensuite à l'utilisateur qu'il doit spécifier les chemins en tant que chemins Linux et que cette transformation sera appliquée aux fenêtres.
  7. Créez votre propre mini-langage de chemin pour cela et documentez-le à l'utilisateur. E.g: " - spécifie un séparateur de répertoire, {root} - se développe à la racine du système de fichiers, {cwd} - se développe dans le répertoire actuel, {app} - se développe dans le chemin de votre application, etc. ... Ensuite, l'utilisateur peut spécifier les chemins de fichiers comme: {root} /myfiles/bob.txt sur les deux plates-formes.
  8. Certains chemins vont fonctionner sur les deux plates-formes. E.g: les chemins relatifs tels que ../my files / bill.txt. Restreindre votre application pour ne travailler qu'avec ces chemins. Documentez cette limitation et la manière dont votre application gère les chemins d'accès à l'utilisateur.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top