Aus den Kommentaren geht hervor, wie ich ein RAMDisk-Setup durchführe und zurückkopiere.
Es ist nicht die vollständige Struktur und wird daher nicht kompiliert [es werden viele Deklarationen fehlen, da ich eine ganze Reihe anderer Strukturen habe, bevor ich zu diesem Teil komme, die nicht generisch genug sind, um kopiert zu werden] , aber gibt die Routinen zum Erstellen, Kopieren und Zurückkopieren. Speichern Sie es als Anwendung und starten Sie es anstelle Ihrer App.
Es ist auch nicht vorgesehen, dass Ihre App sie verwenden soll. Für mich ist dies eine separate Struktur, die nur die Einstellungen der App und einige —settings
Anweisungen beim Start verwendet.
Es wird auch festgelegt, um zu decken, wenn eine Nichtübereinstimmung auftritt - das liegt daran, dass ich mehrere Versionen dieser bestimmten App habe und Caches nicht gemischt werden sollten. Sie können diesen Abschnitt wahrscheinlich weglassen.
-- RAM Disk setup
set copying to 0
if not {exists disk RAMDisk} then
set VolumeName to RAMDisk
set SizeInMB to 1024
-- can choose size using this dialog
--display dialog "RAM Disk Size:" default answer SizeInMB buttons {"OK", "Cancel"}
set NumSectors to ((2 * 1024 * SizeInMB))
set DeviceName to do shell script "hdid -nomount ram://" & NumSectors
tell current application to do shell script "diskutil eraseVolume 'HFS+' '" & VolumeName & "' " & DeviceName
set foundDisk to false
repeat until (foundDisk = true)
if exists disk RAMDisk then
foundDisk = true
delay 1
-- do copy...
duplicate full_path to disk RAMDisk
exit repeat
else
delay 1 -- waiting for RAM disk to appear, if it's slow
end if
end repeat -- end disk wait
else -- if RAMDisk exists already
set p to (folders of disk RAMDisk)
if (exists folder cache_name of disk RAMDisk) then
if p is {} then -- disk's empty
duplicate full_path to disk RAMDisk
end if
else -- if not (exists folder cache_name of disk RAMDisk) then
display alert "RAM Disk contents are from a different version.\nErasing first..." giving up after 4
try --deletes entire contents of RAMDisk, doesn't throw to Trash
--Folder in Trash can still cause "disk full" error.
--'quoted form' in shell scripts (unix) enables spaces in file names (ie RAMDisk name)
tell current application to do shell script "rm -rf Volumes/" & quoted form of RAMDisk & "/"
end try
duplicate full_path to disk RAMDisk
delay 2
end if -- end cache name check
end if -- end RAMDisk check
(*at this point, launch your app, the script will sit & wait for it to quit*)
-- after app quits, copy back & tidy up
display dialog "Quitting or just restarting 'app'?" buttons {"Quitting", "restarting"} ¬
default button "Quitting" giving up after 30
set thebutton to button returned of result as string
if thebutton is "Quitting" then
set toCopy to true -- to test for copyback
if folder backup_location exists then
display dialog "Safety folder already exists\nDelete & continue copy-back or just quit?" buttons {"Delete", "Just Quit"} default button "Delete" giving up after 30
set thebutton to button returned of result as string
if thebutton is "Delete" then
delete folder backup_location
else
set toCopy to false -- will bypass copyback
end if
end if
if toCopy is true then
-- set a backup folder name before copying
set name of folder full_path to cache_name & " - old"
delay 1
duplicate contents of folder cache_name of disk RAMDisk to folder custom_caches_base_path
delay 1
delete folder backup_location
end if
end if -- end quit sequence