The WinFBX framework is all unicode.
Are there any examples using File IO ?
I find the FreeBasic Help File Open statement a bit confusing with no unicode example.
Thanks
James
Yes. See the documentation for the CTextStream class:
https://github.com/JoseRoca/WinFBX/blob/master/docs/File%20Management/CTextStream%20Class.md
Hi James, this type of code serves my purposes:
' Put and Get return 0 on success.
Dim As Long ff = FreeFile
Dim as Long o = Open( "C:\MyFile.dat" For Binary Access Read as #ff )
If o = 0 Then '' Good Open
'' variable to hold file data
Dim buffer as String
If LOF(ff) > 0 Then
'' our string has as many characters as the file has in bytes
buffer = String(LOF(ff), 0)
'' size of buffer is known. Entire string filled with file data
Get #ff, , buffer
End If
'' Or
'' Put #ff, 1, buffer
'' I typically don't check the return value of Put or Get
Dim As Long c = Close(#ff) '' or Close(ff)
If c <> 0 Then
? "C:\MyFile.dat. Close Error: "; c
End If
Else '' Bad Open
? "C:\MyFile.dat. open error: "; o
End If
However, Jose's class will do a much better job!
CTextStream works with ansi or unicode sequential files.
https://github.com/JoseRoca/WinFBX/blob/master/docs/File%20Management/CTextStream%20Class.md
CFileStream works with binary files.
https://github.com/JoseRoca/WinFBX/blob/master/docs/File%20Management/CFileStream%20Class.md
And, contrarily to FreeBasic Open function, they also accept unicode for the file names.
José,
This is the example from your help with an added else and it fails for me.
James
#define UNICODE
#INCLUDE ONCE "windows.bi"
#include "Afx/CTextStream.inc"
using Afx
' // Create an instance of the CTextStream class
DIM pTxtStm AS CTextStream
' // Open file for output as a text stream
IF pTxtStm.OpenForOutputW(ExePath & "\TestW.txt") = S_OK THEN
' // Write a string and an end of line to the stream
pTxtStm.WriteLine "This is a test."
'// Close the file
pTxtStm.Close
Else
? "No GO"
END IF
PRINT "Press any key to end..."
SLEEP
For all my programs, I changed the file handling to use Jose's CFileStream and CTextStream. Works perfectly with ansi and unicode and the syntax is simple as well.
Quote from: Paul Squires on December 21, 2020, 08:37:18 AM
For all my programs, I changed the file handling to use Jose's CFileStream and CTextStream. Works perfectly with ansi and unicode and the syntax is simple as well.
Paul,
Would you provide a small example of writing and reading a unicode text file?
Thank you,
James
Quote from: James Fuller on December 21, 2020, 06:50:31 AM
José,
This is the example from your help with an added else and it fails for me.
James
The method has an optional parameter to create the file if it does not exist. Therefore, use:
IF pTxtStm.OpenForOutputW(ExePath & "\TestW.txt", TRUE) = S_OK THEN
> Would you provide a small example of writing and reading a unicode text file?
In the documentation there are examples to write to a file under the Create, Open (and its variations), Write, WriteLine,WriteBlankLines topics, and for reading under the ReadLine and ReadAll topics.
Quote from: José Roca on December 20, 2020, 10:57:25 PMCTextStream works with ansi or unicode sequential files.
https://github.com/JoseRoca/WinFBX/blob/master/docs/File%20Management/CTextStream%20Class.md
CFileStream works with binary files.
https://github.com/JoseRoca/WinFBX/blob/master/docs/File%20Management/CFileStream%20Class.md
José, is there an "easy" way of determining if I file is "ansi/unicode" vs "binary" without reading the whole file? I'm working on a "grep clone" and want to skip non-text files. Thx!
Sorry, I don't know of any easy way.