Seb
Seb

Reputation: 545

AppleScript : Trying to write in a TextEdit file

I'm trying to write in a TextEdit file already created. The file is in rwxrwxrwx mode so no permission problem.

But when I execute my code, here is the error :

error "Network file permission error." number -5000 from file "/Users/me/Desktop/A directory/file.txt" to «class fsrf»

My code here :

-- Writing in the TextEdit file
set file_URLs_content to "HEEEELLOOOOOO"
tell application "TextEdit"
    set theFile to "/Users/me/Desktop/A directory/file.txt"
    set file_ref to (open for access file theFile with write permission)
    set eof file_ref to 0
    write file_URLs_content to file_ref
    close access file_ref
end tell

And my file.txt is still empty, how can I avoid this error ?

Upvotes: 3

Views: 8456

Answers (3)

Simon White
Simon White

Reputation: 736

The way you can avoid errors when writing text with TextEdit is to remember that it is a text editor. It already knows how to create and save text documents without generating errors. You don’t have to use (error-prone) open for access. You don’t have to use (error-prone) shell scripting. All you have to do is ask TextEdit to make you a text document with whatever contents you like and and save it wherever you like. TextEdit knows how to do that without generating file access errors (like open for access) or accidentally overwriting folders (like shell scripting.)

tell application "TextEdit"
    activate
    set theDesktopPath to the path to the desktop folder as text
    set file_URLs_content to "HEEEELLOOOOOO"
    make new document with properties {text:file_URLs_content}
    save document 1 in file (theDesktopPath & "file.txt")
    close document 1
end tell

The advantage of this method is it is faster and easier to write, it is less error-prone, the text file that you get as output has the same properties as text files that you create manually with TextEdit, and your script can now be easily expanded to include other apps. For example, the text content could come from another app or the clipboard, and the text file could be opened in another app or emailed after it is saved.

The most fundamental feature of AppleScript is sending messages to Mac apps in this way. If you want to convert a PNG to a JPEG, you don’t write a PNG decoder and JPEG encoder in AppleScript and open the PNG file for access and read it byte by byte and then encode a JPEG byte by byte. You simply tell Photoshop to open the PNG image and export it as a JPEG to a particular file location. The “open for access” command is a last resort for reading and writing files that you simply don’t have an app to read or write. The “do shell script” command is for incorporating command-line apps when you simply don’t have a Mac app to do the job, for example, you can do regex stuff with Perl. If all you are doing is working with text files, you not only have TextEdit, but you can also get the free TextWrangler from Mac App Store and it has a giant AppleScript dictionary for reading, writing, and editing text files.

Upvotes: 4

adayzdone
adayzdone

Reputation: 11238

Try:

set file_URLs_content to "HEEEELLOOOOOO"
set filePath to POSIX path of (path to desktop as text) & "file.txt"
do shell script "echo " & quoted form of file_URLs_content & " > " & quoted form of filePath

Upvotes: 1

user1804762
user1804762

Reputation:

You don't need TextEdit for that. Try this:

set the logFile to ((path to desktop) as text) & "log.txt"
set the logText to "This is a text that should be written into the file"
try
    open for access file the logFile with write permission
    write (logText & return) to file the logFile starting at eof
    close access file the logFile
on error
    try
        close access file the logFile
    end try
end try

Upvotes: 3

Related Questions