Visualizzazione post con etichetta filesystem. Mostra tutti i post
Visualizzazione post con etichetta filesystem. Mostra tutti i post

martedì 22 agosto 2017

Ricreazione ricorsiva cartelle

Se volete creare una cartella c'è il comando create folder. Ma se specificate un percorso che indica delle cartelle che non esistono prima dell'ultima, giustamente la cartella non viene creata.
Se volete creare tutto un albero di cartelle in un colpo solo vi consiglio questo messaggio:
on recurFoldCreation tFolder
   set the itemDel to "/"
   repeat with i = 1 to the number of items of tFolder
      put item 1 to i of tFolder into tFolderToCreate
      create folder tFolderToCreate
   end repeat
end recurFoldCreation
semplice ed efficiente.

giovedì 6 novembre 2014

XML

E' possibile lavorare con i file in formato XML utilizzando le funzioni XML presenti in Livecode.
Interagire con un file XML è molto simile all'interazione con i database, ci si connette ad un dato sotto forma di XML. A quel punto il file (o il dato) XML è caricato in memoria, e anche se lo modifichiamo, finchè non lo scarichiamo da qualche parte, non verranno salvate le modifiche da nessuna parte.
Prima di tutto vediamo come caricare un file XML, se abbiamo un file il codice è il seguente:


on mouseUp
   answer file "FIle XML da caricare:"
   put "file:" & it into tXMLData
   put revXMLCreateTreeFromFile(tXMLData, true, true, true) into sXMLID
   set the conID of this card to sXMLID #così recuperiamo il dato
end mouseUp

Se invece avete i dati da qualche altra parte, basta:
on mouseUp
   put revXMLCreateTree(tXMLData, true, true, true) into sXMLID
   set the conID of this card to sXMLID #così recuperiamo il dato
end mouseUp

Adesso ipotizziamo che il dato XML sia:

<amici></amici>

Perchè vogliamo fare una rubrica con i nostri amici, allora dobbiamo inserire un identificativo unico per ognuno di essi, quindi il codice da usare è:


   put the conID of this card into tID
   revXMLAddNode tID, "amici", "ID","1"
   revXMLAddNode tID, "amici", "ID","2"


Quando si aggiunge un nodo, bisogna sempre tutto l'albero fino a dove vogliamo inserirlo. Abbiamo aggiunto due nodi ID e abbiamo aggiunto il valore 1 e 2 in essi, quindi il nostro dato XML è:

<?xml version="1.0"?>
<amici>
  <ID>1</ID>

  <ID>2</ID>
</amici>



La prima riga è stata aggiunta da Livecode per specificare il formato XML utilizzato. Bene ora dobbiamo inserire i nomi, i valori del tag si specificano con le parentesi quadre:

on mouseUp
   put the conID of this card into tID
   revXMLAddNode tID, "amici/ID[1]", "Nome","Mario"
   revXMLAddNode tID, "amici/ID[2]", "Nome","Luigi"
end mouseUp

Ora il nostro dato XML è:

<?xml version="1.0"?>
<amici>
   <ID>1

        <Nome>Mario</Nome>
   </ID>
   <ID>2
        <Nome>Luigi</Nome>
    </ID>
</amici>

Per aggiungere i cognomi, basta:

on mouseUp
   put the conID of this card into tID
   revXMLAddNode tID, "amici/ID[1]", "Cognome","Rossi"
   revXMLAddNode tID, "amici/ID[2]", "Cognome","Bianchi"
end mouseUp

e il nostro dato diviene:

<?xml version="1.0"?>
<amici>
   <ID>1

      <Nome>Mario</Nome>
      <Cognome>Rossi</Cognome>
   </ID>
   <ID>2
      <Nome>Luigi</Nome>
      <Cognome>Bianchi</Cognome>
   </ID>
</amici>

Per sapere il nome del primo contatto basta:

put revXMLNodeContents(tiD, "amici/id[1]/nome")

Per  eliminare un nodo basta:

on mouseUp
   put the conID of this card into tID
   revXMLDeleteNode tID,"amici/ID[1]"
end mouseUp

e il nostro dato sarà:

<?xml version="1.0"?>
<amici>
   <ID>2

      <Nome>Luigi</Nome>
      <Cognome>Bianchi</Cognome>
   </ID>
</amici>

Per avere tutto l'albero basta:

put revXMLtext(tID)

In questo modo possiamo salvarlo dove ci pare.

lunedì 14 luglio 2014

Windows e i percorsi (forzati) virtuali

Windows, da Vista in poi, ha aggiunta una funzionalità di sicurezza sconcertante: i percorsi virtuali.
L'idea di fondo è quella di impedire l'accesso a file o cartelle di sistema importanti, che potrebbero compromettere il computer; un'intuizione intelligente realizzata in maniera pessima. Da Vista in poi non è possibile sapere quali cartelle si possono modificare, perchè apparentemente si ha accesso a tutto; in realtà, per ogni percorso o file vietato, Windows crea un nuovo file o cartella da un'altra parte e l'utente non si accorge di lavorare con altre cartelle o file. Tutto ciò comporta dei pasticci enormi con computer dove lavorano più utenti. Le modifiche di un utente al sistema, non sono viste dagli altri.
La stessa cosa vale per gli elementi del registro di Windows, se provate a sistemare qualche problema al registro di windows, quella modifica avrà effetto solo su di voi; o forse neanche su di voi, visto che alcuni programmi che leggono il registro potrebbero essere avviati con altri permessi!
Per fortuna con fortuna con Livecode c'è un modo per aggirare il tutto, indicare in codice normale o esadecimale la cartella, windows accetta entrambi i formati. Esempio:


put SpecialFolderPath(36)
put SpecialFolderPath(0x0024)

entrambi i codici danno come output  su WinXp C:/WINDOWS. Esistono tantissimi codici, ecco i più comuni di Xp:
  • 0x0000  Il cartella desktop dell'utente corrente. (C:/Documents and Settings/max/Desktop)
  • 0x0006 Cartella preferiti dell'utente.  (C:/Documents and Settings/max/Preferiti)
  • 0x0014 Cartella che contiene i font.  (C:/WINDOWS/Fonts)
  • 0x0005 Cartella documenti. documenti dell'utente corrente (C:/Documents and Settings/max/Documenti)
  • 0x0026 Cartella dei programmi. (C:/Programmi)
  • 0x0002 Cartella programmi utente corrente (C:/Documents and Settings/max/Menu Avvio/Programmi)
  • 0x0007 Programmi in esecuzione automatica all'avvio dell'utente corrente (C:/Documents and Settings/max/Menu Avvio/Programmi/Esecuzione automatica)
  • 0x0024 Cartella di Windows. (C:/WINDOWS)
Ecco quelli di Window Vista:

Num. Descrizione Esempio
0 Desktop utente C:/Users/Ken/Desktop
2 Programmi utente C:/Users/Ken/AppData/Roaming/Microsoft/Windows/Start Menu/Programs
5 Documenti utente C:/Users/Ken/Documents
6 Favoriti utente C:/Users/Ken/Favorites
7 Programmi di avvio utente C:/Users/Ken/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup
8 Cartella file recenti utente C:/Users/Ken/AppData/Roaming/Microsoft/Windows/Recent
9 Cartella utente SendTo C:/Users/Ken/AppData/Roaming/Microsoft/Windows/SendTo
11 Cartella "Start Menu" generale C:/Users/Ken/AppData/Roaming/Microsoft/Windows/Start Menu
13 Cartella musica utente C:/Users/Ken/Music
14 Cartella video utente C:/Users/Ken/Videos
16 Cartella desktop utente C:/Users/Ken/Desktop
19 Cartella utente "Network Shortcuts" C:/Users/Ken/AppData/Roaming/Microsoft/Windows/Network Shortcuts
20 Cartella di sistema Fonts C:/Windows/Fonts
21 Cartella utente Templates C:/Users/Ken/AppData/Roaming/Microsoft/Windows/Templates
22 Cartella di sistema "Start Menu" C:/ProgramData/Microsoft/Windows/Start Menu
23 Cartella di sistema dei programmi "Start Menu/Programs" C:/ProgramData/Microsoft/Windows/Start Menu/Programs
24 Cartella di sistema programmi di avvio C:/ProgramData/Microsoft/Windows/Start Menu/Programs/Startup
25 Cartella desktop comune a tutti gli utenti C:/Users/Public/Desktop
26 Cartella utente "Roaming" C:/Users/Ken/AppData/Roaming
27 Cartella utente stampanti C:/Users/Ken/AppData/Roaming/Microsoft/Windows/Printer Shortcuts
28 Cartella utente dati locali C:/Users/Ken/AppData/Local
29 Cartella utente programmi di avvio C:/Users/Ken/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup
30 Cartella di sistema programmi di avvio C:/ProgramData/Microsoft/Windows/Start Menu/Programs/Startup
31 Cartella utente favoriti C:/Users/Ken/Favorites
32 Cartella utente file temporanei internet C:/Users/Ken/AppData/Roaming/Microsoft/Windows/Temporary Internet Files
33 CSIDL_COOKIES C:/Users/Ken/AppData/Roaming/Microsoft/Windows/Cookies
34 Cartella utente storico C:/Users/Ken/AppData/Roaming/Microsoft/Windows/History
35 Cartella di sistema dati applicazioni C:/ProgramData
36 Cartella di windows C:/Windows
37 Cartella "System32" C:/Windows/system32
38 Cartella di sistema Programmi C:/Program Files
39 Cartella utente immagini C:/Users/Ken/Pictures
40 Cartella utente C:/Users/Ken
41 Cartella "system32" C:/Windows/system32
42 Cartella programmi C:/Program Files
43 Cartella file comuni ai programmi C:/Program Files/Common Files
44 Cartella file comuni ai programmi C:/Program Files/Common Files
45 Cartella di sistema tempates C:/ProgramData/Microsoft/Windows/Templates
46 Cartella comune documenti C:/Users/Public/Documents
47 Cartella di sistema che punta ai programmi di amministrazione C:/ProgramData/Microsoft/Windows/Start Menu/Programs/Administrative Tools
48 Cartella utente che punta ai programmi di amministrazione C:/Users/Ken/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Administrative Tools
53 Cartella utente musica C:/Users/Public/Music
54 Cartella utente immagini C:/Users/Public/Pictures
55 Cartella utente video C:/Users/Public/Videos
56 Cartella risorse di sistema C:/Windows/Resources
59 Cartella burn C:/Users/Ken/AppData/Local/Microsoft/Windows/Burn/Burn

giovedì 10 luglio 2014

File, filtri e ordinamento

Oggi esamineremo come ottenere una lista di file e cartelle, filtrarle e ordinarle.
Prima di tutto esaminiamo come ottenere la lista dei file nella cartella corrente:

put the files


questo comando vi crea una lista di files, ordinati uno per riga:

.setup.exe
.setup.txt
about.txt
Engine License.txt
IDE License.txt
License Agreement.txt
LiveCode Community.exe
Open Source Licenses.txt
Release Notes.pdf
revpdfprinter.dll
revsecurity.dll


Se volessimo ottenere più informazioni sui file, ci basterebbe aggiungere l'opzione detailed:

put the detailed files


e otterremmo una lista, proprio come questa  dove in ogni riga trovereste, se il sistema operativo fornisce tale informazioni:
  • Il nome, in formato URL (quello usato dai browser)
  • Dimensione in bytes (corrisponde al data fork su Mac)
  • Dimensione del resource fork (solo per Mac)
  • Data di creazione in secondi
  • Data di modifica in secondi
  • Data di ultimo accesso in secondi
  • Data dell'ultimo backup (solo per Mac)
  • Proprietario del file (solo Linux e Mac)
  • Gruppo di appartenenza (solo Linux e Mac)
  • Permessi del file
  • Creatore e tipo del file (solo Mac)

proprio come questa lista:

.setup.exe,53653104,,1404119405,1404119409,1404907646,,,,777,
.setup.txt,73132,,1404119356,1404119409,1404119409,,,,666,
about.txt,14689,,1404119356,1404119356,1404119356,,,,666,
Engine+License.txt,34458,,1404119358,1404119358,1404119358,,,,666,
IDE+License.txt,1587,,1404119359,1404119359,1404119359,,,,666,
License+Agreement.txt,34182,,1404119359,1404119359,1404119359,,,,666,
LiveCode+Community.exe,3715072,,1404119359,1404119360,1404907620,,,,777,
Open+Source+Licenses.txt,41578,,1404119360,1404119360,1404119360,,,,666,
Release+Notes.pdf,474521,,1404119360,1404119360,1404119360,,,,666,
revpdfprinter.dll,753664,,1404119360,1404119360,1404310153,,,,666,
revsecurity.dll,1553408,,1404119360,1404119360,1404907622,,,,666,

Alla stessa maniera potete ottenere la lista delle cartelle con:

put the folders
#oppure
put the detailed folders


ecco la lista normale delle cartelle:

..
Documentation
Externals
Plugins
Resources
Runtime
Toolset


Come vedete il sistema operativo, Windows in questo caso, può aggiungere delle cartelle fittizie quando si richiede la lista delle cartelli. Le cartelle fittizie possono essere quella indicata da un punto (.) e/o quella indicata da due punti (..). La cartella mostrata come un punto (.) significa la cartella stessa; mentre la cartella con due punti (..) rappresenta la cartella superiore, cioè quella che contiene la cartella corrente.

Se ci danno fastidio queste cartelle virtuali, possiamo eliminarle dalla lista semplicemente con il comando filter, ad esempio:

put the folders into temp
filter lines of temp without ".."
filter lines of temp without "."



Se vogliamo avere la lista dei file ordinati per dimensione, ci basta usare sort:


put the detailed files into temp
sort lines of temp descending numeric by item 2 of each


Per finire, se vogliamo spostarci in un'altra posizione, basta impostare la proprietà folder (senza la s finale), ad esempio per salire di una cartella basta:

set the folder to ".."


Oppure potete impostare folder con un percorso assoluto:

set the folder to "C:/Programmi/RunRev"