我正在尝试使用 PHP 写入文件,这是我正在使用的代码(取自我上一个问题的答案):
$fp = fopen("counter.txt", "r+");
while(!flock($fp, LOCK_EX)) { // acquire an exclusive lock
// waiting to lock the file
}
$counter = intval(fread($fp, filesize("counter.txt")));
$counter++;
ftruncate($fp, 0); // truncate file
fwrite($fp, $counter); // set your data
fflush($fp); // flush output before releasing the lock
flock($fp, LOCK_UN); // release the lock
fclose($fp);
Run Code Online (Sandbox Code Playgroud)
读取部分工作正常,如果文件被读取,则其内容读取良好,即如果文件包含2289,则2289读取。
问题是,当它增加并将值重写到该文件时,[NUL][NUL][NUL][NUL][NUL][NUL][NUL][NUL]1会被写入。
我错过了什么?为什么写入空字符?
我需要在不清空 php 代码的情况下写入文件中的特定行。
$file="variables.php";
$linecount = 0;
$handle = fopen($file, "r");
while(!feof($handle)){
$line = fgets($handle);
$linecount++;
}
$linecount=$linecount-1;
echo $linecount;
fclose($handle);
$handle = fopen($file, "a+");
fwrite($handle, "$newvar=null". "\n");
Run Code Online (Sandbox Code Playgroud) 我想创建一个文件并将“A”写入其中(ascii 为 65 == 01000001)。奇怪的是,无论 的值是多少std::string binary,其中总是写有字母myfile.txtP。
std::string binary = "01000001";
std::string file = "myfile.txt";
FILE* f;
f = fopen(file.c_str(), "wb");
fwrite(&binary, 1, 1, f);
fclose(f);
Run Code Online (Sandbox Code Playgroud)
执行此代码后,我使用命令读取二进制数据xxd -b myfile,得到以下结果:
00000000:01010000
您发现这段代码有问题吗?
我正在用 C 训练文件处理,我试图在fseek()写入和读取时更改文件的单行或位置,fread()无论fwrite()是否更改变量并再次写入整个文件,但显然附加模式和写入模式都不允许您正如我在下面的示例中尝试的那样执行此操作:
void main()
{
FILE *file;
char answer;
char text[7] = "text 1\n";
char text2[7] = "text 2\n";
file = fopen("fseek.txt", "w"); //creating 'source' file
fwrite(text, sizeof(char), sizeof(text), file);
fwrite(text, sizeof(char), sizeof(text), file);
fwrite(text, sizeof(char), sizeof(text), file);
fclose(file);
scanf("%c", &answer);
switch(answer)
{
case 'a':
//attempt to change single line with append mode
file = fopen("fseek.txt", "a");
fseek(file, 7, SEEK_SET); //7 characters offset is the second line of the file
fwrite(text2, sizeof(char), sizeof(text), …Run Code Online (Sandbox Code Playgroud) 我使用PHP fwrite将HTML和PHP输入到文件中问题是这个,我用''来封装$ content is ie.HTML和PHP,
然后我用""来封闭
$sql="SELECT * FROM $tbl_name WHERE.....
Run Code Online (Sandbox Code Playgroud)
这是$ content,
但是现在,当我想要这样做时,我陷入困境:
WHERE var1="$var1" and var2="$var2"
Run Code Online (Sandbox Code Playgroud)
因为我已经使用了''和"",如果我使用其中的一个,那么它显然不会起作用
有什么想法可以解决这个问题吗?还有其他类似'或'的符号吗?
在此先感谢Niall
我有一个668x493的数组,我想保存.所以我正在做以下事情.
data:是一个指向保存值的数组的指针.
long lSize;
FILE* image_save;
image_save=fopen("image_save_file.bin","w+b");
fwrite(data,1,329324,image_save);
Run Code Online (Sandbox Code Playgroud)
但是,当我读回这个数组时:
char* check_image;
p1File=fopen("image_save_file.bin","r+b");
fseek (p1File , 0 , SEEK_END);
lSize = ftell (p1File);
fseek (p1File , 0 , SEEK_SET);
Run Code Online (Sandbox Code Playgroud)
当我检查lSize时,我看到它327680 ???
所以,当我做恐惧时,我只获得327680值!
请问,你能指出我的错误吗?
我目前正在忙于一个项目,我必须将一个部分从一个文件复制到另一个文件,所以我使用fread和fwrite为它创建了一个代码.但我遇到了一个问题:出于测试目的,我制作了一个应该复制整个文件的代码,但不知何故,代码创建的副本比原始文件大.请参阅下面的代码
FILE *base_file;
FILE *new_file;
fpos_t curpos;
int tmp;
// Open the base file
fopen_s(&base_file, "C:/base.dat", "rb");
// Open the file which should contain the copy
fopen_s(&new_file, "C:/new.dat", "w");
// Get the filesize
fseek(base_file, 0, SEEK_END);
fgetpos(base_file, &curpos);
fseek(base_file, 0, SEEK_SET);
//Read and copy (it seems to go wrong here)
for(int i = 0; i < curpos; i++){
fread (&tmp, 1, 1, base_file);
fwrite(&tmp, 1, 1, new_file);
}
fclose(base_file);
fclose(new_file);
Run Code Online (Sandbox Code Playgroud)
基本文件为525 kb,新文件为527kb.据我所知,出现此问题的部分是在有7个nullbytes的部分之后,并且副本在某些部分之后添加了一个'0D'(十六进制).在ascii中,'0D'字符是'回车'.我想知道我的复制代码将回车符添加到文件中的原因是什么?据我所知,这个脚本应该只是工作,因为我只是读取基本文件,并直接将其复制到新文件,并且基本文件不包含这些回车.
当我使用此代码时
FILE *f = fopen(file, "wb");
fflush(f);
if (f==NULL) {
//perror(f);
return 0;
}
else{
fwrite(text, sizeof(char), strlen(text), f);
int i = fprintf(f, "%s", text);
if (i>0) {
fclose(f);
return 1;
}
Run Code Online (Sandbox Code Playgroud)
如果我写的话,(text是const char text[1024000],它被设置为函数中的一个参数)
This is a test
This is a test
Run Code Online (Sandbox Code Playgroud)
为了测试它是否可以写多行,它会写出来
This is a test
This is a testThis is a test
This is a test
Run Code Online (Sandbox Code Playgroud)
为什么我会得到这种奇怪的行为?
我编写了一个程序,将指针写入文件(fwrite)并从文件读取指针(fread)。但是,该程序似乎没有在文件中写入任何内容,也没有从文件中读取任何内容。它只是将指针的最终增量打印5次并退出。谁能在我的语法中发现似乎正在执行此操作的错误/错误?
#include <stdio.h>
int main() {
FILE *fTest;
int *testPtr;
int x = 10;
if ((fTest = fopen("test.c", "wb")) == NULL) {
printf("Error!");
}
testPtr = &x;
int i;
for (i = 0; i < 5; i++) {
fwrite(testPtr, sizeof(int), 1, fTest);
*testPtr += 1;
}
for (i = 0; i < 5; i++) {
fread(testPtr, sizeof(int), 1, fTest);
printf("%d", *testPtr);
}
fclose(fTest);
}Run Code Online (Sandbox Code Playgroud)
我希望以下代码将数字42写入二进制文件,然后读取并打印出确切的值.它会这样做,但它不会退出,只是停止在等待用户输入时.这是执行我解释的代码:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char argv[]){
char *filename = "test.db";
int *my_int = calloc(1, sizeof(int));
*my_int = 42;
// First we open file to write to it
FILE *file = fopen(filename, "w");
fwrite(my_int, sizeof(int), 1, file);
fflush(file);
free(file);
// Then we want to read from it
*my_int = -1;
file = fopen(filename, "r");
fread(my_int, sizeof(int), 1, file);
free(file);
printf("Read back %d\n", *my_int);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道我可以简单地用w+旗帜打开它,但我只是想知道为什么它只是停止..