Je veux faire un outil qui prend des noms de fichiers en tant que paramètres, mais lorsque j'utilise ce code: et j'utilise glisser-déposer ou "envoyer à" dans Windows, je reçois le nom de fichier court.
Donc un fichier comme Il n'y a pas de problème lorsque j'exécute le script à partir de la commande Commandline, avec les paramètres longs . p> Comment puis-je obtenir le nom de fichier long lorsque j'utilise glisser-déposer ou envoyer à? p> p> "c: \ ruby193 \ bin \ test \ nouveau texte document.txt" code> devient
c: \ ruby193 \ bin \ test \ newtex ~ 1.txt code> comme argument. p>
4 Réponses :
Je ne sais pas s'il est possible de changer l'argument que vous recevez un glisser-dépose, mais vous pouvez utiliser le Win32 - Edit-- getlongpathName () code>
fonction, à l'aide de
Y compris la solution de @ Peter formatée pour la lisibilité: p>
L'a trouvé sur Diverstopics.com/Ruby/518646- Rre-Ruby-Cygwin-and-Chemins.html Exiger 'TROUVER' nécessite "FileTilS '" exiger "Win32API'" def get_long_win32_filename (short_name) max_path = 1024 long_name = "" * MAX_PATH LFN_SIZE = WIN32API.NEW ("Kernel32" , "Getlongpathname", ['P', 'P', 'L'], 'L']). Appelez (nom_fr.Name, long_name, max_path) Retour (1..max_path) .Cluded? (LFN_SIZE)? long_name [0..lfn_size-1]: short_name fin end argv.each faire | A | met un puts get_long_win32_filename (a) fin
http://www.varioustopics.com/ RUBY / 518646-RRE-RUBY-CYGWIN-anD-PATHS.HTML
require 'find' require 'fileutils' require 'Win32API' def get_long_win32_filename(short_name) max_path = 1024 long_name = " " * max_path lfn_size = Win32API.new("kernel32", "GetLongPathName", ['P','P','L'],'L').call(short_name, long_name, max_path) return (1..max_path).include?(lfn_size) ? long_name[0..lfn_size-1] : short_name end ARGV.each do|a| puts a puts get_long_win32_filename(a) end
J'ai beaucoup appris à essayer de comprendre cela!
Cependant, @Peter m'a battu avec une solution beaucoup plus simple. P>
Voici le mien, au cas où quelqu'un le trouve utile. File_get_long_name.rb P>
J'ai eu l'idée de: un archivé < Un href = "http://web.archive.org/web/20020617214130/http://vb-world.net/files/tip511.html" rel = "nofollow"> vb-world.net article et le converti en rubis. p>
J'ai trouvé la raison pour laquelle mon script a retrouvé des noms de fichiers courts, j'avais fait un correctif de registre pour activer la glisser-déposer sur des scripts de rubis et des gravures SchorTes comme suit
Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\rbfile\ShellEx\DropHandler] @="{60254CA5-953B-11CF-8C96-00AA00B8708C}" [HKEY_CLASSES_ROOT\rbwfile\ShellEx\DropHandler] @="{60254CA5-953B-11CF-8C96-00AA00B8708C}" [HKEY_CLASSES_ROOT\RubyFile\ShellEx\DropHandler] @="{60254CA5-953B-11CF-8C96-00AA00B8708C}" [HKEY_CLASSES_ROOT\RubyWFile\ShellEx\DropHandler] @="{60254CA5-953B-11CF-8C96-00AA00B8708C}"