我有一个我创建的现有ini文件,我想知道是否有更新文件部分的方法,或者每次都必须重写整个文件?
这是我的config.ini文件的示例:
[config]
title='test'
status=0
[positions]
top=true
sidebar=true
content=true
footer=false
Run Code Online (Sandbox Code Playgroud)
说我想改变[positions] top=false.所以我会使用parse_ini_file获取所有信息,然后进行更改并使用fwrite重写整个文件.或者有没有办法改变那个部分?
每当我想让PHP脚本将输出写入服务器上的文件时,我经常会遇到负面评论.
我用的fopen(),fwrite()和fclose()功能.
我知道如何实现这一目标的唯一方法是将输出文件的权限设置为0666,或者让它由"nobody"拥有(这是PHP在我们的Apache Web服务器上运行的用户).
因此,如果"0666"或"无人拥有"是安全风险,那么如何成功安全地允许PHP脚本写入文件?
感谢您就此主题分享指导.
我是新来的.
无论如何,我对fwrite()进行了研究,但是我找不到解决方案,所以我正在寻求帮助.我想要的是在一些其他特定的行之后添加一行新的文本.我有一个.txt文件,其中有:
//Users
//Other stuff
//Other stuff2
Run Code Online (Sandbox Code Playgroud)
现在我想做的是能够在//用户下面添加一个新用户而不用触及"其他东西"和"其他东西2".所以看起来应该是这样的:
//Users
Aneszej
Test321
Test123
//Other stuff
//Other stuff2
Run Code Online (Sandbox Code Playgroud)
到目前为止我所拥有的:
$config = 'test.txt';
$file=fopen($config,"r+") or exit("Unable to open file!");
$date = date("F j, Y");
$time = date("H:i:s");
$username = "user";
$password = "pass";
$email = "email";
$newuser = $username . " " . $password . " " . $email . " " . $date . " " . $time;
while (!feof($file)) {
$line=fgets($file);
if (strpos($line, '//Users')!==false) {
$newline = PHP_EOL . $newuser;
} …Run Code Online (Sandbox Code Playgroud) 我正在编写一个简单的程序,写入二进制文件,关闭它,然后读取刚刚写入的数据.我正在尝试编写一个无符号字符数组.我在阅读数据时遇到了一些问题.我不确定我是在写不正确的数据还是读错了.当我读取数据时,我得到的输出为:5 bytes对于读取的字节数,但我得到的输出与我写入文件的值不同.
FILE *binFile = fopen("sample","wb");
unsigned char data[5]={5,10,15,20,25};
fwrite(data,sizeof(unsigned char),sizeof(data),binFile);
fclose(binFile);
unsigned char data2[5];
binFile = fopen("sample","rb");
int s = fread(data2,1,sizeof(data),binFile);
fclose(binFile);
cout<<s<<" bytes\n";
for(int i=0; i<5;i++)
cout<<data2[i]<<" ";
cout<<"\n";
Run Code Online (Sandbox Code Playgroud) 我有一组我要连接的文件(每个文件代表多部分下载的一部分).
每个拆分文件大小约为250MiB,我有可变数量.
我的连接逻辑是直截了当的:
if (is_resource($handle = fopen($output, 'xb')) === true)
{
foreach ($parts as $part)
{
if (is_resource($part = fopen($part, 'rb')) === true)
{
while (feof($part) !== true)
{
fwrite($handle, fread($part, 4096));
}
fclose($part);
}
}
fclose($handle);
}
Run Code Online (Sandbox Code Playgroud)
我花了一段时间来追踪它,但显然,每当我有超过8个单独的部分(总共2GiB)时,我的输出文件被截断为2147483647字节(报告者sprintf('%u', $output)).
我想这是由于某种32位内部计数器的所使用fopen()或fwrite().
我该如何解决这个问题(最好只使用PHP)?
我想知道是否可以根据列中包含的内容设置列的大小.我希望当你打开CSV一旦它直接生成列是正确的大小.
要写入CSV,我有以下代码:
$csvFile = fopen(CSV_FILE, $writeMode);
$searchStr = array(";");
$replaceStr = array(",");
foreach ($csvArray as $csvArrayRow) {
fwrite($csvFile, iconv("UTF-8", "Windows-1252",str_replace($searchStr, $replaceStr, html_entity_decode($csvArrayRow["title"], ENT_HTML401 | ENT_QUOTES, "UTF-8")).";"));
fwrite($csvFile, iconv("UTF-8", "Windows-1252",str_replace($searchStr, $replaceStr, html_entity_decode($csvArrayRow["author"], ENT_HTML401 | ENT_QUOTES, "UTF-8")).";"));
fwrite($csvFile, $csvArrayRow["date"].";"."\n");
}
fclose($csvFile);
echo json_encode(array(count($csvArray)));
exit;
Run Code Online (Sandbox Code Playgroud)
可以添加一些东西来调整列的大小,还是在其他地方呢?
因此,基本上,我需要能够以Unicode创建文本文件,但是我所做的任何事情都会保存在ANSI中。
这是我的代码:
wchar_t name[] = L"???????????";
FILE * pFile;
pFile = fopen("chineseLetters.txt", "w");
fwrite(name, sizeof(wchar_t), sizeof(name), pFile);
fclose(pFile);
Run Code Online (Sandbox Code Playgroud)
这是我的“ chineseLetters.txt”的输出:
-NWòTx[øfû–P[SŠƒR õ2123
Run Code Online (Sandbox Code Playgroud)
此外,该应用程序位于MBCS中,不能更改为Unicode,因为它需要同时使用Unicode和ANSI。
非常感谢您的帮助。谢谢。
感谢您的所有快速回复!有用!
只需添加L“ \ uFFFE ???????????” 仍然没有用,文本编辑器仍然将其识别为CP1252,所以我做了2次fwrite而不是一次,一个是BOM,另一个是字符,这是我的代码:
wchar_t name[] = L"???????????";
unsigned char bom[] = { 0xFF, 0xFE };
FILE * pFile;
pFile = fopen("chineseLetters.txt", "w");
fwrite(bom, sizeof(unsigned char), sizeof(bom), pFile);
fwrite(name, sizeof(wchar_t), wcslen(name), pFile);
fclose(pFile);
Run Code Online (Sandbox Code Playgroud) 我有一组列表项目,我读到结构.此代码应替换现有项目.用户输入位置(1..n)并应替换相应的记录.但它不起作用,记录放到文件的末尾.怎么了?
int pos;
FILE* file = fopen("file.txt", "ab+");
scanf("%d", &pos);
Schedule sch = getScheduleRecord();
fseek(file, sizeof(Schedule) * (pos - 1), SEEK_SET);
fwrite(&sch, sizeof(sch), 1, file);
fclose(file);
break;
Run Code Online (Sandbox Code Playgroud) 我遇到了一个问题,即使我禁用指数表示法,也会以指数表示法fwrite打印数字.一个例子:
library(data.table)
options(scipen = 999)
testint = c(500000)
Run Code Online (Sandbox Code Playgroud)
在我打印之前,r表现和不以指数表示法打印:
print(testint)
[1] 500000
print(list(testint)
[[1]]
[1] 500000
Run Code Online (Sandbox Code Playgroud)
但当我这样做时:
fwrite(list(testint), "output")
Run Code Online (Sandbox Code Playgroud)
该文件的内容是5e + 05.我怀疑这个问题可能特别适用fwrite,就像我一样:
write(testint, "output1")
Run Code Online (Sandbox Code Playgroud)
输出文件的内容为500000.
有没有办法阻止fwrite这样做?我可以切换到使用write,但它们之间存在巨大的速度差异,而且我正在编写大量数据,因此如果可能的话,我会想要避免显着的性能影响.谢谢!
编辑:如果有人有兴趣,有一个现有的开放GitHub的问题在这里,我发现后,我问的问题!
我有一个文本文件来阅读和处理20000行.在文本文件中,我想读取点坐标并分配给DirectX进行渲染.文本文件的快照
我使用std :: ifstream,getline,stringstream来获取点坐标.在构建win32程序然后开始运行之后,读取并存储数组中的点坐标需要很长时间.(5分钟通过20000行文本文件).代码如下:
struct PointCoord { std::string PtName; float PtX = 0.0; float PtY = 0.0;}
PointCoord *PointPtr = NULL;
PointCoord pointcoord;
std::ifstream File_read(FileNameTXT);
while (getline(File_read, TextHandler))
{
std::istringstream iss;
std::string skip;
if (TextHandler.find(" POINT ") != std::string::npos)
{
iss.str(TextHandler);
std::string TempX, TempY;
iss >> skip;
iss >> pointcoord.PtName;
//pointcoord pass value to PointCoord
iss >> TempX;
iss >> TempY;
pointcoord.PtX = std::stof(TempX.c_str());
pointcoord.PtY = std::stof(TempY.c_str());
//dynamically store the points coordiantes
if (PointPtr == NULL)
{
PointPtr = …Run Code Online (Sandbox Code Playgroud)