我在这里找不到这个问题。在 Bash 中,如何比较两个文件的文件大小,然后仅当两个文件大小不同时才执行某些操作?
在 C++ 11 中切断 fstream 文件结尾的最佳方法是什么
我正在编写一个数据持久性类来为我的音频编辑器存储音频。我选择使用 fstream(可能是个坏主意)来创建一个随机访问二进制读写文件。
每次我在我的文件中录制一点声音时,我都会将它添加到文件的末尾。另一个内部数据结构/文件,包含指向音频文件的指针并跟踪编辑。
当我撤消录音操作然后做其他事情时,音频文件的最后一点变得无关紧要。它在文档的当前状态中未被引用,并且您无法将自己重做回到可以再次看到它的状态。所以我想砍掉这部分文件并在新的一端开始录制。我不需要在中间剪掉一些东西,就在最后。
当用户退出时,该文件将保留并在他们再次打开项目时重新加载。
在我的应用程序中,我希望用户始终执行此操作,并且能够执行此操作可为我节省多达 30% 的文件大小。这个文件会很长,可能会非常非常长,因此每次发生这种情况时都将其重写为另一个文件并不是一个可行的选择。
当用户保存时重写它可能是一种选择,但它仍然没有那么有吸引力。
我可以在开头粘贴一个值,说明文件应该有多长,然后覆盖结尾以回收空间,但同时。如果我想在崩溃的情况下不断更新数据存储文件,这意味着我将一遍又一遍地重写开始。我担心这可能对闪存驱动器不利。我还可以通过分析指针文件重新计算加载时文件有用部分的结尾,但同时我可能会浪费所有空间,这很复杂。
在 fstream API 中是否有一个简单的调用?
我是否使用了错误的库?注意我想坚持使用我喜欢的通用 STL,这样我就可以使代码尽可能跨平台。
我似乎无法在文档中找到它并且已经查找了很多小时。这不是地球的尽头,但会使这更简单一些,并且可能更有效。也许我只是想念它。
感谢您的帮助安德烈'
我刚刚安装了这个库。PhpStorm 会执行通常的代码补全(类除外)\XeroAPI\XeroPHP\Api\AccountingApi。\XeroAPI\XeroPHP\Api\IdentityApi同一文件夹中的类工作得很好。
该文件相当大 - 2,560KB。如果我从类中删除大约 65,000 行中的一半(并且无论是前半部分还是后半部分都有效),那么我会恢复代码完成状态。事实上,我可以只删除最后 3,000 行左右(将文件减小到 2,499KB)并且它可以工作。
我还尝试了快速正则表达式查找/替换来删除所有@throwsPHPDoc 注释。这使得文件减少到 2,491KB,嘿,很快,代码完成就可以正常工作了。
如果我不得不猜测,我会说它不会对超过 2.5MB 的源文件或其他文件进行代码完成,但我找不到任何相关设置。
有什么方法可以让该文件完成代码,而不需要从中删除内容(无论如何,下次我进行 Composer 更新时都会恢复这些内容)?
我正在 Visual Studio 中编写程序。\n我使用fread和复制了一个文件fwrite。\n输出文件大小比输入文件大。\n你能解释一下原因吗?
#define _CRT_SECURE_NO_WARNINGS\n#include <stdio.h>\n#include <stdlib.h>\n#include <memory.h>\n\nint main()\n{\n char *buffer;\n int fsize;\n\n FILE *fp = fopen("test.txt", "r");\n FILE *ofp = fopen("out.txt", "w");\n fseek(fp, 0, SEEK_END);\n fsize = ftell(fp);\n\n buffer = (char *)malloc(fsize);\n memset(buffer, 0, fsize); // buffer\xeb\xa5\xbc 0\xec\x9c\xbc\xeb\xa1\x9c \xec\xb4\x88\xea\xb8\xb0\xed\x99\x94\n\n fseek(fp, 0, SEEK_SET);\n fread(buffer, fsize, 1, fp);\n\n fwrite(buffer, fsize, 1, ofp);\n\n fclose(fp);\n fclose(ofp);\n free(buffer);\n}\nRun Code Online (Sandbox Code Playgroud)\n 我使用c ++查看256个计数并将ASCII代表写入文件.
如果我使用生成256个字符串的方法然后将该字符串写入该文件,该文件重量为258字节.
string fileString = "";
//using the counter to attach the ASCII count to the string.
for(int i = 0; i <= 256; i++)
{
fileString += i;
}
file << fileString;
Run Code Online (Sandbox Code Playgroud)
如果我使用循环写入文件的方法,文件正好是256字节.
//using the counter to attach the ASCII count to the string.
for(int i = 0; i <= 256; i++)
{
file << (char)i;
}
Run Code Online (Sandbox Code Playgroud)
什么是字符串,字符串中的哪些额外信息被写入文件?
这是我尝试以MB为单位获取文件大小的方法:
FileInfo file_size = new FileInfo(list[i]);
double friendly_file_size = (file_size.Length / 1048576);
MessageBox.Show(friendly_file_size.ToString());
Run Code Online (Sandbox Code Playgroud)
问题是它在逗号后没有显示任何内容..当文件大小为3.15时,它表示3.当它为0.5时,表示0,我做错了什么?
我需要确定一个非常大的字符编码文件的大小.读取该文件需要花费大量时间.
我的理解是,当首次创建/修改文件时,大小会被缓存,因此操作系统可以在请求大小时(例如,文件管理器)快速检索该值.(例如,在win explorer中打开大文件的属性对话框时似乎很快)
假设以上情况属实,可以用Java检索吗?我原以为length()读取文件来确定大小......或者它实际上是否获得了这个缓存的大小?或者,File对象的创建是否会读取/检索缓存的大小?
我自己的研究还没有能够回答这些问题.
我理解我会得到一些帮助
谢谢
我试图找到一个文件的大小,如果它大于0,我想做一些事情.我有这个代码:
set file="C:\AnalyzerCheck\loaded.txt"
set minbytesize=0
if exist %file% (
FOR /F "usebackq" %A IN ('%file%') DO set size=%~zA
if %size% GTR %minbytesize% (
//do stuff
) else (
//do stuff
)
Run Code Online (Sandbox Code Playgroud)
但是,当我运行脚本时,我得到了这个输出/错误:
C:\ AnalyzerCheck> set file = C:\ AnalyzerCheck\loaded.txt
C:\ AnalyzerCheck> set minbytesize = 0
file~zA此时出人意料.
C:\ AnalyzerCheck> FOR/F"usebackq"文件~zA
C:\ AnalyzerCheck>
我该如何解决这个错误?
编辑:
新错误:
我正在尝试使用html文件输入标记将视频上传到运行在wamp 2.2服务器上的php 5.3.10脚本.我发现它不会上传,显然它太大了.
我已经进入php.ini并将以下内容更改为100M:post_max_size,upload_max_filesize
和memory_limit是128 MB.我重新启动WAMP并尝试上传文件,但仍然没有上传.然后我清除了我的缓存和历史记录并重新启动了wamp,它仍然无效.我然后清除缓存,关闭wamp,关闭我的电脑,然后再次启动,开始wamp,它仍然无法正常工作.
我试图上传的视频大约是25 MB.
尽管我在php.ini中进行了更改,但每次尝试上传此视频时,Apache错误日志都会一直发布此错误:
[error] [client 127.0.0.1] PHP警告:POST内容长度26246222字节超过了第0行的Unknown中的8388608字节限制,引用:http://localhost/uploadFile.html
还有一个PHP脚本,包含以下行:
echo ini_get('upload_max_filesize'),",",ini_get('post_max_size'),",",ini_get('memory_limit'):打印输出:100M,8M,128M
所以似乎是post_max_size是问题,尽管我在php.ini中设置为100M
可能是什么问题呢?我该如何解决这个问题?......
这是我的php.ini文件内容的链接,它位于C:\ wamp\bin\php\php5.3.10下:
我有这个代码来获取上传文件的大小:
var iSize = ($("#formmedia")[0].files[0].size / 1024);
if (iSize / 1024 > 1)
{
if (((iSize / 1024) / 1024) > 1)
{
iSize = (Math.round(((iSize / 1024) / 1024) * 100) / 100);
$("#size").html( iSize + "Gb");
}
else
{
iSize = (Math.round((iSize / 1024) * 100) / 100)
$("#size").html( iSize + "Mb");
}
}
else
{
iSize = (Math.round(iSize * 100) / 100)
$("#size").html( iSize + "kb");
}
Run Code Online (Sandbox Code Playgroud)
此代码完全正常,但它将输出显示为:
<div id="size">5.78 Mb</div>
Run Code Online (Sandbox Code Playgroud)
我怎样才能让它始终只显示Kilobytes?