Из комментариев, вот косточки того, как я делаю настройку RAMDisk и копирую обратно.
Это не полная структура, поэтому не будет компилироваться в том виде, в каком она есть [будет много пропущенных объявлений, так как у меня есть целый набор других структур, прежде чем я доберусь до этого бита, которые не являются достаточно общими, чтобы их стоило копировать] , но дает процедуры для создания, копирования и копирования обратно. Сохраните его как приложение и запустите его вместо вашего приложения.
В нем также нет положений, предписывающих вашему приложению использовать его - для меня это отдельная структура, использующая только prefs и некоторые инструкции —settings
при запуске.
Он также покрывает случаи несоответствия - это потому, что у меня есть несколько версий этого конкретного приложения, и кэши не должны смешиваться. Вы, вероятно, можете оставить этот раздел вне.
-- 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