为应用程序创建图标的最佳方法是什么?
从Visual Studio或者其他程序.
我在Visual Studio中创建了一个图标并将其用作应用程序图标,但是当我在桌面上放置图标快捷方式时,只有一些灰色图标.这可能是因为图标尺寸或其他原因吗?
我正在尝试打开一个文件进行写入.该文件可能不存在.
我发现[NSFileHandle fileHandleForWritingAtPath:filePath]如果文件不存在则返回nil.谷歌搜索后,我找到了这样的代码片段
[[NSData data] writeToFile:filePath atomically:YES]
Run Code Online (Sandbox Code Playgroud)
我想,在打开它之前,确保文件存在.
我的问题是:后一个代码行推荐的文件创建方式是什么?看起来很奇怪NSFileHandle没有例程来创建一个新文件(并且只能处理现有文件).
我最近在我们的文件服务器上重新设计了安全性,将大部分完全控制标记为修改.现在我的开发人员告诉我,只要他们使用GENERIC_ALL打开文件(CreateFile()例如),他们就会收到拒绝访问的消息.
经过研究,似乎没有任何迹象表明这GENERIC_ALL不仅仅是GENERIC_EXECUTE+ GENERIC_WRITE+ GENERIC_READ; 然而,这似乎并非如此,因为开发人员能够添加三个常量值,并使用它CreateFile().
所以,我问......究竟GENERIC_ALL做了什么?
谢谢,
马特
我试图阻止我的进程中的第三方DLL读取我打开的文件,我发现它是......好吧,不可能.
无论我做什么,无论我指定什么共享标志,他们的呼叫似乎总是成功!
以下是Process Monitor的截图 - 第一个CreateFile电话是我的,剩下的是他们的:
这怎么可能呢?为什么"共享模式:无"对我说谎,我该如何防止这种情况?
下面的代码是一个重现问题的示例:
#include <stdio.h>
#include <Windows.h>
int main()
{
LPCTSTR file = TEXT("C:\\Test1234.xml");
HANDLE hFile1 =
CreateFile(file, FILE_READ_ATTRIBUTES, 0, NULL, OPEN_ALWAYS, 0, NULL);
HANDLE hFile2 =
CreateFile(file, FILE_READ_DATA, 0, NULL, OPEN_ALWAYS, 0, NULL);
DWORD n;
BYTE buf[1];
printf("%d\n", ReadFile(hFile2, buf, sizeof(buf), &n, NULL));
CloseHandle(hFile1);
CloseHandle(hFile2);
DeleteFile(file);
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试从缓冲区文件中读取二进制数据,该文件由不同的进程(我无法修改)连续写入.我正在使用以下代码打开文件:
fileH = CreateFileA((LPCSTR)filename,
GENERIC_READ,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, NULL);
Run Code Online (Sandbox Code Playgroud)
它正确打开,没有错误.但是,当我从文件中读取数据时,它似乎阻止了其他进程写入文件,因为我丢失了数据.
缓冲区是循环的,这意味着文件大小是固定的,并且新数据会不断写入缓冲区中的旧数据.
编辑: 有时最琐碎的解决方案有效......
我已经联系了这家软件公司并告诉他们这个bug,并在一天之内发布了一个带有修复程序的新版本.对不起,这不适用于所有人.
我有一个使用CreateFile()和WriteFile()创建的面向行的文本文件(Unicode).
使用ReadFile()将该文件作为二进制流读取非常简单,但需要进行额外的低级处理才能将其分解为行.
是否有Win32功能为我这样做?
再次,请注意它是'C'(而不是C++),我不想使用POSIX/ANSI C函数,如readline().
如果上述问题的答案是否定的,那么使用原生Win32 C函数完成读取面向行的文本文件的"最短代码"是什么?例如,使用ReadFile(),StrChr()等.
谢谢.
我知道这FILE_FLAG_POSIX_SEMANTICS允许文件名区分大小写,但它没有命名的事实FILE_FLAG_CASE_SENSITIVE让我认为它可能做的不止于此。
它还有其他作用吗,还是我分析得太深入了?
当我vim newfilename用来打开文件而该文件没有退出时,vim将创建一个带有该名称的新文件newfilename.
但是,MacVim不能以这种方式工作--- ie mvim newfilename(alias mvim="open -a macvim")会导致错误:newfilename does not exist
有没有办法配置MacVim这样mvim newfilename(alias mvim="open -a macvim")会创建一个新文件并打开它?
我们的应用程序在客户端服务器A上运行并使用以下命令在服务器2008 R2文件服务器上创建文件:
CreateFile(LockFileName,
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ, nil,
CREATE_ALWAYS,
FILE_FLAG_WRITE_THROUGH or FILE_FLAG_DELETE_ON_CLOSE,
0);
Run Code Online (Sandbox Code Playgroud)
客户端正在测试灾难情况并关闭"服务器A"并将其关闭.他们报告我们使用相同文件名和相同代码片段在'服务器B'上运行的应用程序失败(即文件继续存在)至少15分钟,直到我们相信他们浏览到包含该文件的文件夹Windows资源管理器,此时文件将自动删除.
是否有人知道在这种情况下应该如何表现,创建服务器已经消失,是否应该释放句柄并自动删除文件?为什么查看该文件会导致它被删除?
有趣的是,在另一个假设相似的设置上,问题不会发生.
我最近花了一段时间试图弄清楚需要哪些权限才能使该语句发挥作用:
if (!File.Exists(path))
{
// Create a file to write to.
using (StreamWriter sw = File.CreateText(path))
{
sw.WriteLine("Hello");
sw.WriteLine("And");
sw.WriteLine("Welcome");
}
}
Run Code Online (Sandbox Code Playgroud)
我最终对“每个人”都拥有“特殊权限”,这应该可以解决问题。遗憾的是它没有,这实际上可能是一个错误?
以下作品:
if (!File.Exists(_logFilePath))
{
using (var fs = File.Create(_logFilePath))
{
using (var sw = new StreamWriter(fs))
{
sw.WriteLine("Hello");
sw.WriteLine("And");
sw.WriteLine("Welcome");
}
}
}
Run Code Online (Sandbox Code Playgroud)
理论上是相同的(我认为),但我无法让第一个工作。