我在 serverfault.com 上创建了一个问题,建议我在这里提问。
我有一个 PHP 脚本。当我使用浏览器时,它运行良好。它在同一目录中写入一个 XML 文件。该脚本需要大约 60 秒才能运行,生成的 XML 文件大约为 16 MB。
我在 Windows Server Web edition SP1 64 位上通过 FastCGI 运行 PHP 5.2.13。
该代码从 SQL 服务器中提取库存,运行一个循环来为第三方构建一个 XML 文件。
我在任务调度程序中创建了一个任务来运行 c:\php5\php.exe "D:\inetpub\tools\build.php"
任务调度程序显示大约一分钟的时间流逝,这是脚本在浏览器中运行所需的时间。
没有返回错误,但没有创建文件。
每次更改计划任务属性时,都会出现一个用户密码框,然后我输入管理员帐户密码。
如果我在命令行运行相同的路径和参数,它不会出错,也不会创建文件。
当我以管理员身份右键单击运行命令提示符时,仍未创建该文件。我在文件创建之后得到了我的 echo 语句“文件已发布”,并且没有返回错误。
我正在做一个简单的 fopen fwrite fclose 来将 php 变量的内容保存到 .xml 文件中,并且只有在通过浏览器运行脚本时才会创建该文件。
下面是 xml-building 循环之后发生的事情:
$feedContent .= "</feed>";
sqlsrv_close( $conn );
echo "<p>feed built</p>";
$feedFile = "feed.xml";
$handler = fopen($feedFile, 'w');
fwrite( $handler, $feedContent );
fclose( $handler );
echo "<p>file published</p>"; …
Run Code Online (Sandbox Code Playgroud) 我在写模式下打开了一个文件,如下所示:
int a = 10;
char b = 'm';
int y = 0;
char z;
FILE *fp = NULL;
fp = fopen("/config/gps_backup.dat","w");
Run Code Online (Sandbox Code Playgroud)
我正在对文件执行两个变量的 frwite(第一个是整数,第二个是字符),如下所示:
fwrite(&a,1,sizeof(int),fp);
fwrite(&b,1,sizeof(char),fp);
Run Code Online (Sandbox Code Playgroud)
例如:
fread(&y,1,sizeof(int),fp);
fread(&z,1,sizeof(char),fp);
Run Code Online (Sandbox Code Playgroud)
如果连续 fread 操作完成,y 和 z 变量是否可以保存 10 和 'm' 的值。
塔
#include <stdio.h>\n#include <stdlib.h>\n\nint main(int argc, char *argv[]){\n\n if(argc != 3){\n printf("Usage: ./copy filename newfile\\n");\n exit(1);\n }\n\n int bytes;\n long file_size, file_copied_size;\n FILE *file_to_copy, *new_file;\n\n if((file_to_copy = fopen(argv[1], "rb")) == NULL){\n printf("File cannot be opened - read\\n");\n exit(1);\n }\n if((new_file = fopen(argv[2], "wb")) == NULL){\n printf("File cannot be opened - write\\n");\n exit(1);\n }\n\n fseek(file_to_copy, 0, SEEK_END);\n file_size = ftell(file_to_copy);\n rewind(file_to_copy);\n\n char *buffer = malloc(1024 * 1024); /* Imposto un buffer di 1MB per maggiore efficienza */ \n if(!buffer){\n printf("Errore allocazione memoria\\n");\n …Run Code Online (Sandbox Code Playgroud) 使用py2app转换.py为.app. 起初,它看起来不错,但是当我执行open()并f.write(如下所示)创建一个文件时.txt,它不会创建该文件。
f = open(name + ".txt", "w")
f.write("users inputs here")
Run Code Online (Sandbox Code Playgroud)
当我运行程序时,这工作得非常好.py
任何人有任何想法,我似乎找不到任何可以解释为什么会发生这种情况的东西。
我创建了一个包含 4000 个块的文件,块大小为 4096 字节。现在我想操作单个块并再次读取它们而不更改文件的大小。实际上我想将另一个文件中的块写入我创建的文件中的特定块。因此,我以二进制模式打开文件,如下所示:
FILE * storeFile=fopen(targetFile, "wb"); // this one I created before
FILE * sourceFILE=fopen(sourceFile,"rb");
Run Code Online (Sandbox Code Playgroud)
现在我正在尝试将内容读取到指针
char * ptr=malloc(4096);
...
for(i=0; i<blocks_needed; i++)
{
fread(ptr,4096,1,sourceFile);
// now I am going to the position of the blocks I want to write to
fseek(storeFile,freeBlocks[i]*4096,SEEK_SET);
// and now I am writing it to the File I created before
fwrite(ptr,4096,1,storeFile);
...
}
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我之前创建的文件改变了它的大小,并成为我想要写入其中的文件的副本。
我究竟做错了什么?
先感谢您!
我想按字节将文件读入数组,然后将数组的数据反转写入新文件中(程序通过命令行参数获取文件名)。用 txt 文件尝试过,它有效,但如果我在 jpg 文件上尝试,新文件比原始文件大!确定的文件大小以long size保存;对于 jpg 文件来说也是正确的,并且写入循环获取大小时间执行写入一个字符(字符是一个字节大,我是对的?)。有谁知道输出文件如何变得大于 size*byte?
对我来说这似乎不符合逻辑!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc,char* argv[])
{
FILE *file;
char *buffer;
long size;
char filename[32];
if(argc>1)
{
//determine file size
file=fopen(argv[1],"r");
fseek(file,0,SEEK_END);
size=ftell(file);
rewind(file);
if(size>33554432) //32MB
{
fclose(file);
return 0;
}
//create buffer and read file content
buffer=malloc(33554432);
fread(buffer,1,size,file);
fclose(file);
//create new file name and write new file
strcpy(filename,argv[1]);
strcat(filename,"_");
file=fopen(filename,"w");
{
long i;
for(i=size-1;i>=0;i--)
{
fputc(buffer[i],file);
}
}
fclose(file);
free(buffer);
}
return 0; …Run Code Online (Sandbox Code Playgroud) 我正在尝试将一个字符串附加到一个包含 json 字符串的文件中。为此,我必须删除最后一个括号“]”,并将新字符串附加到文件末尾。这就是我尝试这样做的方式:
$fh = fopen($target_file, 'r+') or die("can't open file"); // opens file
$stat = fstat($fh); // get data from statt struct
ftruncate($fh, $stat['size']-1); // remove last char
fseek($fh, SEEK_END); // move file pointer to end
fwrite($fh, $append_str); // write new string
fclose($fh); // close
Run Code Online (Sandbox Code Playgroud)
但是, $append_str 被写入文件的开头。附加操作的工作应该有什么不同?(ps:使用wamp服务器)
不知道为什么我在这里收到错误。我按照说明在文档中创建了文件夹“共享游乐场数据”。有没有人有任何见解?
import PlaygroundSupport
import Foundation
var fileName = "Csv.csv"
var csvText = "Date,Task,Time Started,Time Ended\n"
fileName.append(csvText)
let fileUrl = playgroundSharedDataDirectory.appendingPathComponent(fileName)
do {
try fileName.write(to: fileUrl, atomically: true, encoding: .utf8)
} catch {print("error")}
Run Code Online (Sandbox Code Playgroud) 我正在尝试将结构保存到文件中,然后在另一个程序中再次读取它。我以前从未遇到过此问题,但至少据我所知,我从未尝试将带有值的双变量写入56.806201550387598文件。并不是说我不知道为什么这个数字会产生任何问题,但是每当我尝试将包含该值的结构写入文件时,该字段及其后声明的任何字段都只能从该结构中读出初始化值宣言。
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
typedef struct statsSet{
int pathCount = 0;
double vMinMean = 0;
int imgsFound = 0;
int minWidth = INT_MAX;
int maxWidth = 0;
}statsSet;
void wrightToFile(statsSet sSet){
FILE* of = fopen ("imgStats2.dat", "w");
fwrite (&sSet, sizeof(statsSet), 1, of);
fclose (of);
}
statsSet readFromFile(){
statsSet statReadIn;
FILE *ifl = fopen ("imgStats2.dat" , "r");
fread(&statReadIn, sizeof(statsSet), 1, ifl);
fclose (ifl);
return statReadIn;
}
void pr(statsSet statReadIn){
cout << "pathCount: " …Run Code Online (Sandbox Code Playgroud) 我用来fwrite写一个文件(它是一个图像)。
首先,我正在编写一个具有固定大小的标题
int num_meta_write_bytes = fwrite(headerBuffer, 1, headerSize, file);
Run Code Online (Sandbox Code Playgroud)
这工作正常
然后我必须写像素:
num_write_bytes = fwrite(data_pointer, 1, image_size, file);
Run Code Online (Sandbox Code Playgroud)
这工作正常
对于我的情况,我必须在标题和像素之间写入可变数量的零,我发现的(丑陋的?)解决方案是:
for (size_t i = 0; i < padding_zeros; i++) //padding_zeros is calculated in runtime
{
uint8_t zero = 0;
num_meta_write_bytes += fwrite(&zero, 1, sizeof(uint8_t), fp);
}
Run Code Online (Sandbox Code Playgroud)
(此代码放置在写入像素之前)
我的问题是:有没有办法直接告诉fwrite连续写入相同的值padding_zeros次数?而不是使用这个for循环?