7
votes

Comment obtenir un nom de fichier long de Argv

Je veux faire un outil qui prend des noms de fichiers en tant que paramètres, mais lorsque j'utilise ce code: xxx

et j'utilise glisser-déposer ou "envoyer à" dans Windows, je reçois le nom de fichier court. Donc un fichier comme "c: \ ruby193 \ bin \ test \ nouveau texte document.txt" devient c: \ ruby193 \ bin \ test \ newtex ~ 1.txt comme argument.

Il n'y a pas de problème lorsque j'exécute le script à partir de la commande Commandline, avec les paramètres longs .

Comment puis-je obtenir le nom de fichier long lorsque j'utilise glisser-déposer ou envoyer à?


0 commentaires

4 Réponses :


4
votes

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 getlongpathName () fonction, à l'aide de

- Edit--
Y compris la solution de @ Peter formatée pour la lisibilité: xxx


1 commentaires

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



5
votes

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


0 commentaires

0
votes

J'ai beaucoup appris à essayer de comprendre cela!

Cependant, @Peter m'a battu avec une solution beaucoup plus simple.

Voici le mien, au cas où quelqu'un le trouve utile. File_get_long_name.rb

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. xxx


0 commentaires

0
votes

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}"


0 commentaires