Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android应用程序中使用C++ Builder编写文件? 我在Windows 10下使用C++版本的Cuilder 10.3开发一个应用程序,运行在三星Galaxy A40上。p>_Android_File_Fopen_Fwrite_C++builder 10.3 Rio - Fatal编程技术网

如何在Android应用程序中使用C++ Builder编写文件? 我在Windows 10下使用C++版本的Cuilder 10.3开发一个应用程序,运行在三星Galaxy A40上。p>

如何在Android应用程序中使用C++ Builder编写文件? 我在Windows 10下使用C++版本的Cuilder 10.3开发一个应用程序,运行在三星Galaxy A40上。p>,android,file,fopen,fwrite,c++builder-10.3-rio,Android,File,Fopen,Fwrite,C++builder 10.3 Rio,有一件事我似乎无法开始工作,那就是将TListBox的内容保存到一个文件中 作为Android的新手,我不确定这个文件应该出现在哪里,我需要什么权限 我在一个函数中尝试了以下操作,将列表框的内容保存到文件中,但似乎无法打开要写入的文件。它总是返回-1: int hFile; // File Handle int ByteCt=0; hFile = FileOpen("Shopping.lst", fmOpenWrite); if (hFile > 0) { for (i

有一件事我似乎无法开始工作,那就是将TListBox的内容保存到一个文件中

作为Android的新手,我不确定这个文件应该出现在哪里,我需要什么权限

我在一个函数中尝试了以下操作,将列表框的内容保存到文件中,但似乎无法打开要写入的文件。它总是返回-1:

int hFile;      // File Handle
int ByteCt=0;

hFile = FileOpen("Shopping.lst", fmOpenWrite);
if (hFile > 0)
{
    for (int i=0; i<ListBox1->Count; i++)
    {
        ByteCt+=FileWrite(hFile,ListBox1->Items[i].Text.c_str(),
                                ListBox1->Items->Strings[i].Length());
        ByteCt+=FileWrite(hFile,"\n\r",2);
    }
    FileClose(hFile);
}
是否有一些基本的东西我错过了,或者什么?

使用该类确定应用程序可以访问的各种系统路径。有关详细信息,请参阅。例如:

字符串FileName=TPath::CombineTPath::GetDocumentsPath,_DShopping.lst; hFile=FileOpenFileName,fmOpenWrite; //或:hFile=FileCreateFileName; 但仅供参考,这是一种有自己方法的方法,例如:

ListBox1->Items->SaveToFileFileName,TEncoding::UTF8; 您只是在复制SaveToFile已经为您做的事情。因此,您不需要手动编写字符串,尤其是因为您一开始就没有正确地编写字符串

C++Builder中的字符串是UnicodeString的别名,它是UTF-16编码的字符串。它的长度指定它包含的Android元素上的WideChar char16\t的数量,但FileWrite仅以原始字节处理。因此,由于sizeofWideChar=2,您只写入每个字符串的1/2字节。而且,\n\r也不是可以使用的有效换行符。您需要使用\r\n或只是\n,或使用RTL的sLineBreak全局常量。但更糟糕的是,您试图以原始UTF-16格式编写字符串,但却以8位ANSI/UTF-8格式编写换行符。因此,您最终会得到一个混合编码文件,许多软件无法正确读取该文件

如果您真的想手动写入字符串,那么它需要看起来更像这样:

int-hFile;//文件句柄 int ByteCt=0,字节写入; hFile=FileOpenFileName,fmOpenWrite; //或:hFile=FileCreateFileName; 如果hFile>0 { 对于int i=0;iCount;i++ { 字符串s=ListBox1->Items->Strings[i]; BytesWrite=FileWritehFile,s.c_str,s.Length*sizeofWideChar; 如果字节数小于0,则中断; ByteCt+=字节写入; BytesWrite=FileWritehFile,\u D\r\n,sizeofWideChar*2; 如果字节数小于0,则中断; ByteCt+=字节写入; /*或者: UTF8String s=ListBox1->Items->string[i]; BytesWrite=文件写入文件,s.c_str,s.长度; 如果字节数小于0,则中断; ByteCt+=字节写入; BytesWrite=FileWritehFile\r\n,2; 如果字节数小于0,则中断; ByteCt+=字节写入; */ } 文件关闭文件; }

但不是直接使用文件写入,而是考虑使用,如:

int-ByteCt=0; std::unique_ptr Filenew TStreamWriterFileName,TEncoding::UTF8; //或者:auto File=std::make_uniqueFileName,TEncoding::UTF8; 对于int i=0;iCount;我++ { 字符串s=ListBox1->Items->Strings[i]; 文件->写线; ByteCt+=File->Encoding->GetByteCounts+File->Encoding->GetByteCountFile->NewLine; }
这与列表框没有多大关系。你最好问一下如何打开文件进行写作。你可以尝试使用完整路径。谢谢,更改了标签…谢谢,雷米,这不仅为我指明了正确的方向,还指出了我多年来养成的一些坏习惯。