Título: [C#] Mover archivos de windows || Isolated Storage Publicado por: n-utz en 22 Julio 2017, 05:32 am Buenas gente, miren vengo con una idea que necesito que me orienten para poder hacerla.
La idea es esta > Tengo varias 'resumenes' en txt que completo dia a dia en mi PC, y despues los voy copiando/reemplazando en la carpeta desktop de Google Drive, resulta que siempre reemplazo los mismos archivos, es decir mantengo actualizados mis resumenes de Google Drive y siempre son los mismos. Se me ocurrio poder hacer algun programa (tengo la idea de .exe en la cabeza) que ejecute una macro o pedazo de codigo que mueva y reemplace los archivos de cierta carpeta/s a la de Google Drive y haga todo el proceso solo con tan solo ejecutar el .exe . Por otro lado, estoy buscando información sobre como poder usar el Isolated Storage, no suelo entender la libreria de ms. Si pueden orientarme en este asunto les agradezco, planeo hacerlo en VS 2017 con C#. Título: Re: [C#] Mover archivos de windows || Isolated Storage Publicado por: Eleкtro en 23 Julio 2017, 20:04 pm Hola.
Voy a empezar fuerte. Veamos... Si quieres seguir mi consejo, entonces aquí debes plantearte el siguiente dilema (o al menos yo en tu lugar me lo plantearía muy seriamente): - Si quieres crear una Macro, entonces usa cualquier herramienta para crear macros, no necesitas recurrir a un lenguaje de alto nivel como C#, de hecho lo que harías en 5 horas en C#, lo haces en 5 minutos con cualquier herramienta enfocada a las macros. Una herramienta excelente sería JitBit Macro Recorder. - Si quieres usar C# para automatizar de forma programática la subida y sobreescirtura de archivos en Google Drive, entonces olvídate de crear macros, y usa la API de Google Drive para .NET, el resultado será un algoritmo informático optimizado en donde la subida/sobreescritura del archivo se realizaría en segundo plano o background, de forma asincrónica y resumible, y donde podrías controlar cualquier posible fallo/excepción al intentar subir/sobreescribir el archivo. Esta sofisticación, con una macro, requeriría mucho más esfuerzo y análisis en comparación para conseguir hacerlo... y hacerlo medianamente bien. Si tu decisión final es seguir queriendo utilizar C# para desarrollar una macro, pues en mi humilde opinión eso que propones sería lo mismo que pretender estudiar la profesión de maquinista de trenes... sólo para usar trenes de juguete. m_yEMTRQ82Q Es así, de verdad, para crear una macro en plan "automatizar pulsaciones del teclado y del ratón junto a análisis de comparación de imagen o automatización web" no necesitas C#, y de hecho el resultado no sería tan eficiente ( teniendo en cuenta que para empezar no sabes demasiado bien como hacerlo, y para eso deberías recurrir al aprendizaje de conceptos de software automation en .NET, o recurrir a metodologías rudimentarias con la WinAPI, lo que te llevaría mucho tiempo. ) en comparación con recurrir a una herramienta especializada en crear macros... como por ejemplo la herramienta que ya mencioné más arriba. Partiendo de la premisa de arriba, y asumiendo que te hayas replanteado el problema para enfocarlo de forma óptima y utilizar C# junto a la API de Google Drive, entonces te explicaré el procedimiento...: Antes de poder utilizar la API, primero existen unos pasos preeliminares que basicamente consisten en registrar una clave de la API de Google Drive para tu uso personal, con la que generar un archivo.json para poder realizar la autorización OAuthv2 en los servicios de Google Drive desde tu código/aplicación. Aquí te explican paso a paso el qué y el cómo debes llevar a cabo el registro de la API:
Cita de: https://developers.google.com/drive/v3/web/quickstart/dotnet Step 1: Turn on the Drive API Use this wizard (https://console.developers.google.com/start/api?id=drive)to create or select a project in the Google Developers Console and automatically turn on the API. Click Continue, then Go to credentials. On the Add credentials to your project page, click the Cancel button. At the top of the page, select the OAuth consent screen tab. Select an Email address, enter a Product name if not already set, and click the Save button. Select the Credentials tab, click the Create credentials button and select OAuth client ID. Select the application type Other, enter the name "Drive API Quickstart", and click the Create button. Click OK to dismiss the resulting dialog. Click the file_download (Download JSON) button to the right of the client ID. Move this file to your working directory and rename it client_secret.json. Bien. El segundo paso sería descargar/instalar la API v3 de Google Drive para .NET:
Ten en cuenta que puedes automatizar la instalación de la API de Google Drive ( incluyendo sus dependencias ) en Visual Studio, simplemente creando un nuevo proyecto de C#, abriendo la consola de NuGet y escribiendo el siguiente comando en dicha consola: Código: Install-Package Google.Apis.Drive.v3 Llegados a este punto, ahora ya puedes empezar a desarrollar tu algoritmo con la API. Lo primero sería desarrollar una funcionalidad para la autentificación de usuario con la API de Google Drive, seguidamente otra funcionalidad para buscar/identificar el archivo que quieres sobreescribir, y por último implementar la funcionalidad para llevar a cabo la subida/sobreescritura del archivo. ...¿Que cómo se hace todo eso?, pues leyendo y poniendo en práctica todo lo leido, por supuesto, esto no es cosa de "hacer click y listo". Aquí tienes la documentación oficial de la API:
Esto es, mayórmente, sobre lo que debes documentarte:
PD: No es tan dificil como parece. Por si te sirve de ánimos: yo ya hice clientes en .NET con funcionalidades sincrónicas y asincónicas para administrar la cuenta de Youtube, Gmail, y Drive. Aprendido el manejo de uno, aprendidos todos xD, ya que las APIS de cada servicio de Google solo cambian en los nombres de sus miembros, pero su modo de empleo es practicamente idéntico... Si tienes cualquier duda al respecto, no dudes en preguntar. Saludos! Título: Re: [C#] Mover archivos de windows || Isolated Storage Publicado por: TickTack en 23 Julio 2017, 20:24 pm Hola Elektro,
desde el viernes que quize ayudar pero siempre hubo algo que no me dejo escribir una respuesta. Yo crei que solo se trataba de mover archivos de una carpeta a otra. Bueno pero antes de borrar mi codigo me gustaria publicarlo aqui (a menos que no este bien). Envidiame, Elektro... jajaja. No. Si soy el peor... ni siquiera funciona: Código: using System; Tambien queria comentar que para descargar archivos de Google Drive siempre me gusto este archivo.cs: https://gist.github.com/yasirkula/d0ec0c07b138748e5feaecbd93b6223c/archive/40ea0967c6e8e8ee3a3bb837d75be00f4400b4d5.zip Saludos Título: Re: [C#] Mover archivos de windows || Isolated Storage Publicado por: Eleкtro en 23 Julio 2017, 20:38 pm Yo crei que solo se trataba de mover archivos de una carpeta a otra. No sé, espero no haberme equivocado yo... por que de lo contrario estoy escribiendo mucho para nada xD. Lo que yo he interpretado es que el usuario pretende subir un archivo local, a una carpeta llamada "desktop" en su cuenta de Google Drive, y sobreescribir ese archivo existente por el archivo local. Como ya digo, espero no haberme equivocado yo xD. ( Me tomo la libertad de hacer doble post, por que el código de este comentario no cabe en el de arriba. ) No suelo entregarle el trabajo hecho a nadie, sino las herramientas para hacerlo, pero entiendo que hablar de APIs de terceros (y más siendo tan "completas" o extensas como las de Google) es sinónimo de pereza y dificultad... basicamente por que hay que aprender muy bien como funciona "internamente" para poder hacer algo con esa API. Bueno, pues voy a intentar ayudarte un poco más en ese aspecto compartiendo contigo (y con los demás a los que les pueda resultar útil) un código que he extraido de mi framework comercial ElektroKit, que si a alguien le interesa... lo puede encontrar en mi firma de usuario. El código original lo he recortado mucho solamente para dejar los miembros/funcionalidades que tú necesitarías para reproducir esa "macro", es decir la funcionalidad de autorización, la de identificar el archivo a sobreescribir, y la de sobreescribirlo. EDITO: Lo he tenido que recortar muchísimo más de lo que esperaba para que quepa. Maldito límite de 30.000 caracteres XD. Bueno, aquí lo tienes: Código
+ Código
• ¿Qué necesito para usar el código de arriba? Puedes copiar todo el código en un nuevo proyecto de VB.NET para generar una dll que puedes usar sin complicación desde C#, o bien puedes traducir todo el código a C# con cualquier herramienta online de conversión de código VB.NET a C#, como por ejemplo http://converter.telerik.com/ (http://converter.telerik.com/) (ojo, no existe la herramienta perfecta, puede producir errores de compilación que necesitarían ser arreglados manuálmente.) Como ya dije, no me gusta darle todo el trabajo hecho a nadie, pero al menos te doy varias opciones para hacerlo más sencillo :P. • ¿Cómo utilizo el código de arriba para mis propósitos? 1. Usar la función Authorize / AuthorizeAsync para llevar a cabo la autorización OAuthv2 en Google Drive. 2. Usar la función GetFiles / GetFilesAsyncpara listar los archivos contenidos en tu GoogleDrive, para identificar el archivo que quieres sobreescribir. Dicha función devolverá una colección de objetos Google.Apis.Drive.v3.Data.File, y en la propiedad "File.Id" está expuesto el identificador de cada archivo devuelto. La intención de usar esta función será para obtener dicho identificador. 3. Usar la función UpdateFile / UpdateFileAsync para sobreescribir un archivo existente, pasándole el Id. del archivo (objeto "file") que obtuviste previamente. Fin. En esencia es así de sencillo. Si te fijas bien en el código fuente, podrás ver que para cada uno de las funciones escribí un ejemplo de código que demuestra el modo de empleo de cada una. No resulta dificil traducir esos pequeños códigos de ejemplo a C# si lo llegases a necesitar. Tampoco es necesario que lo uses, simplemente puedes tomar ese código en VB.NET como un punto de partida que puedes reproducir en C#, y extenderlo a tus necesidades. PD: Me gustaría pensar que este código le podrá servir de utilidad ...a quien sea. ^^ Un saludo! Título: Re: [C#] Mover archivos de windows || Isolated Storage Publicado por: TickTack en 23 Julio 2017, 20:44 pm WWWWWWWWWWWWWWWWWowwwwwwwwwwwwwwwww.....
Hasta a mi me podria servir esto en futuro..... Gracias por tu aporte!!! Impresionante lo que pusiste... Título: Re: [C#] Mover archivos de windows || Isolated Storage Publicado por: Eleкtro en 23 Julio 2017, 22:06 pm Hasta a mi me podria servir esto en futuro..... Ojalá, aunque está muy recortado. Es versión "slim". :xD Gracias por tu aporte!!! Gracias a ti también por colaborar con tu código, aunque al parecer no te funciona, jeje. En un principio no entiendo muy bien por qué buscas un archivo llamado "datos.txt" y que contenga lineas con el texto "Origen" y "Destino" dentro de ese archivo, pero bueno, creo que das a entender un formato similar a esto: Datos.txt Código: Origen: C:\CarpetaOrigen1 Pero luego haces una llamada a File.Move(), que además lo tienes colocado FUERA del ciclo, aparte, creo que es evidente por que no funciona eso de mover una carpeta como si fuese un archivo xD (en su lugar puedes usar el método Directory.Move(), que además puede mover archivos también). Teniendo un archivo de texto con el formato de arriba, quizás lo que realmente querías hacer es algo así: Código
Saludos! Título: Re: [C#] Mover archivos de windows || Isolated Storage Publicado por: TickTack en 23 Julio 2017, 22:17 pm Hola Elektro,
ahhh si!! Ese codigo que tienes ahi ese era necesario para mover carpetas... Yo, pero lo que queria mostrar es como mover archivos. El documento de textos, en realidad es: Origen: C:\CarpetaOrigen1\archivo.txt Destino: C:\CarpetaDestino1\archivo.txt Origen: C:\CarpetaOrigen2\archivo.txt Destino: C:\CarpetaDestino2\archivo.txt Origen: C:\CarpetaOrigen3\archivo.txt Destino: C:\CarpetaDestino3\archivo.txt etc... Por eso use File.Move(). Tenia por entendido de que en el segundo parametro de ese metodo tambien tenia que ser pasado el nombre del archivo y su tipo como si ya existiese en la otra carpeta..... Pero ves... Ya publicaste otro codigo de como mover carpetas que tambien me podria servir en mis futuras operaciones de programas jejejej.... Muchas gracias |