标签: createfile

在Linux上创建原子文件?

如果文件不存在,我需要创建一个文件,试图创建此文件的另一个进程将失败.我甚至需要在创建过程完成向其写入实际数据之前将文件视为"已创建".

我读到了O_EXCL标志open(),所以似乎解决方案存在,但我有几个问题:

  1. 你有这种技术的经验吗?有多好?(我想我不能拥有DB级别的原子性,但是足够好就是......好吧,够了)
  2. 我应该立即关闭文件,open()以便将其视为已创建,然后重新打开以进行写入?
  3. 有什么细微之处需要注意吗?

c++ linux filesystems createfile atomicity

2
推荐指数
1
解决办法
4176
查看次数

如何在文件名中创建包含特殊字符的文本文件

演示我的问题

  • 打开一个新的Excel工作簿并将这些符号设置为单元[A1]
  • 在编辑器中的某处插入以下VBA代码(Alt+ F11)
  • 每行执行一行(F8)
Sub test()

    strCRLF = StrConv(vbCrLf, vbUnicode)
    strSpecialchars = StrConv(Cells(1, 1), vbUnicode)
    strFilename = "c:\test.txt"

    Open strFilename For Output As #1
    Print #1, strSpecialchars & strCRLF;
    Close #1

End Sub

您将获得一个包含[A1]中文字符的文本文件.这证明了如果你知道添加的技巧,VBA能够处理unicode字符StrConv(vbCrLf, vbUnicode)

现在尝试相同的strFilename = "C:\" & strSpecialchars & ".txt".您将收到一个错误,您无法使用此文件名创建文件.当然,你不能使用相同的技巧添加一个新行,因为它的文件名.

如何使用VBA在文件名中创建包含特殊字符的文本文件?
是否有解决方法或我做错了什么?

注意

vba excel-2003 createfile

2
推荐指数
1
解决办法
1万
查看次数

Java:制作目录的正确方法

目录some_folder,some_folder_1,some_folder_2和some_folder_3最初不存在.

File folder1 = new File("some_folder/some_folder_1"); 
File folder2 = new File("some_folder/some_folder_2"); 
File folder3 = new File("some_folder/some_folder_3"); 

if(!folder1.exists()) {
    folder1.mkdirs();
}

if(!folder2.exists()) {
    folder2.mkdirs();
}

if(!folder3.exists()) {
    folder3.mkdirs();
}
Run Code Online (Sandbox Code Playgroud)

这是一个很好的方法吗?

java directory createfile

1
推荐指数
2
解决办法
1094
查看次数

createNewFile()抛出错误

在我的Android应用程序中,我尝试在SD卡上创建一个xml文件.我试过这个:

public class XmlFileCreator extends Activity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);


        System.out.println(Environment.getExternalStorageDirectory());
        // create a new file called "new.xml" in the SD card
        File newxmlfile = new File( Environment.getExternalStorageDirectory(),"new.xml");
        try {
            newxmlfile.createNewFile();
        } catch (IOException e) {
            Log.e("IOException", "exception in createNewFile() method");
        }

        FileOutputStream fileos = null;
        try {
            fileos = new FileOutputStream(newxmlfile);
        } catch (FileNotFoundException e) {
            Log.e("FileNotFoundException", "can't create FileOutputStream");
        }
        // we create a XmlSerializer in order to write xml data
        XmlSerializer serializer …
Run Code Online (Sandbox Code Playgroud)

android file try-catch createfile

1
推荐指数
1
解决办法
3424
查看次数

无法并行读取同一文件

我试图同时读取两个不同应用程序中的日志文件。但是使用共享模式 #FILE_SHARE_READ 的CreateFile ( http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx ) 在第二次调用时总是失败,并出现错误 -代码 32:ERROR_SHARING_VIOLATION: - 该进程无法访问该文件,因为该文件正在被另一个进程使用。

当日志文件以 FILE_SHARE_WRITE 或 FILE_SHARE_READ 模式写入时 | FILE_SHARE_WRITE 仅当 FILE_SHARE_READ 用于写入应用程序时,两个应用程序中的任何一个都无法读取该文件,并且仅当读取应用程序使用 FILE_SHARE_WRITE 或 FILE_SHARE_READ | FILE_SHARE_WRITE 时,该文件才有效。#FILE_SHARE_WRITE,而不是使用#FILE_SHARE_READ 时。奇怪....有什么建议吗?

非常感谢。

修正案:

Writer-Application: CreateFile(file,GENERIC_WRITE,FILE_SHARE_READ,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0)
Reader-Applications: CreateFile(file,GENERIC_READ,FILE_SHARE_READ | FILE_SHARE_WRITE,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0)
Run Code Online (Sandbox Code Playgroud)

修正2:

当使用第一修正案中的调用时,第一个读取器应用程序可以成功获取文件句柄,但第二个读取器应用程序将失败并出现 ERROR_SHARING_VIOLATION。

修正3:有人给我指出了解决方案!

问题是我在共享模式中使用逻辑或而不是按位或:FILE_SHARE_READ或FILE_SHARE_WRITE = 1或2 = 1,但它应该是FILE_SHARE_READ | 文件共享写入 = 1 | 2 = 3。因此无法工作,因为写入应用程序需要 FILE_SHARE_WRITE。

c# c++ windows winapi createfile

1
推荐指数
1
解决办法
1827
查看次数

VBScript可以创建文本文件,但是不能删除文件(权限被拒绝)?

我创建一个.vbs文件(可以:创建文本文件->打开notepad.exe->删除上面的文件),如下所示:

' Create a new file
Dim objFS, objFile
Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFile = objFS.CreateTextFile("D:\Folder\Textfile.txt")
objFile.WriteLine ("sample text")

' Run a program and wait
WScript.CreateObject("WScript.Shell").Run "notepad.exe", 1, true

' Delete file
objFS.Deletefile("D:\Folder\Textfile.txt")
Run Code Online (Sandbox Code Playgroud)

但是当我运行它时,关闭记事本窗口后,它显示错误消息:

Line: 10
Char: 1
Error: Permission denied
Code: 800A0046
Source: Microsoft VBScript runtime error
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这个.vbs无法删除文本文件?感谢您的任何帮助!

permissions denied createfile delete-file

1
推荐指数
1
解决办法
8185
查看次数

如何使用 CreateFile 在 UnBuffered 模式下在 Windows 中附加文件

每次我的函数被调用时,它都会覆盖到文件中。请注意,我正在使用以下标志以无缓冲模式打开文件。

FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH

如果我使用简单的缓冲模式,它工作正常。

FILE_ATTRIBUTE_NORMAL

我在无缓冲模式下遇到以下错误。

** 错误 ** CreateFile 失败:参数不正确。

请在下面找到代码片段。这段代码被多次调用。

HANDLE hFile;

LPCWSTR file_path = convertCharArrayToLPCWSTR(UNBUFFERED_FILE);

hFile = CreateFile(file_path,
    FILE_APPEND_DATA,
    FILE_SHARE_WRITE,
    NULL,
    OPEN_ALWAYS,
    FILE_FLAG_NO_BUFFERING | FILE_FLAG_WRITE_THROUGH,
    NULL
);

if (hFile == INVALID_HANDLE_VALUE)
{
    std::cout << "Unable to open/create file for writing" << std::endl;
    PrintError(TEXT("CreateFile failed"));
}


Data *data = new Data();
DWORD dwBytesToWrite = sizeof(Data);
DWORD dwBytesWritten = 0;
BOOL bErrorFlag = FALSE;


bErrorFlag = WriteFile(
    hFile,                  // open file handle
    data,                   // start of data to …
Run Code Online (Sandbox Code Playgroud)

c++ winapi file createfile unbuffered

1
推荐指数
1
解决办法
235
查看次数

Flutter 创建一个文件并写入其内容

我正在开发一个从服务器收集文本内容的应用程序,下一步我尝试将它们保存到单独的文件中,以便保存在应用程序存储中。存储是一个名为“存储”的文件夹。在存储内部,有一个“ fileList.txt ”文件,其中包含文件列表。

pubspec.yaml中,我在资产中声明了该文件夹,如下所示:

 assets:
- storage/
Run Code Online (Sandbox Code Playgroud)

我可以使用以下函数读取它:

Future<String> readFileContent() async {
    String response;
    response =
        await rootBundle.loadString('storage/fileList.txt');
    return response;
  }
Run Code Online (Sandbox Code Playgroud)

为了保存文件,我使用了使用“ path_provider ”包的在线示例。但是,当我尝试使用以下函数保存下载的文件之一(例如“ file4.dat ”)时,我遇到以下错误。我该如何解决这个问题?

  saveFileLocally() async {
    await _writeFile();
  }
  
  Future<Null> _writeFile() async {
    await (await _getLocalFile()).writeAsString(vars.fileContents);
  }

  Future<File> _getLocalFile() async {
    // get the path to the document directory.
    String dir = (await PathProvider.getApplicationSupportDirectory()).path;
    print('DIR :::: ' + dir);
    return new File(
        '$dir/storage/files/file' + vars.newFileID.toString() + '.dat');
  }
Run Code Online (Sandbox Code Playgroud)

错误是:

Unhandled Exception: FileSystemException: Cannot open file, …
Run Code Online (Sandbox Code Playgroud)

provider path createfile flutter

1
推荐指数
1
解决办法
7612
查看次数

为什么我得到:“该进程无法访问该文件,因为它正在被另一个进程使用”

我使用 C# 尝试了以下操作:

File.CreateText("x.y");
folderBrowserDialog1.ShowDialog();
string dir = folderBrowserDialog1.SelectedPath.ToString();
File.WriteAllText("x.y", dir);
Run Code Online (Sandbox Code Playgroud)

但是当我运行该程序时,它说该进程无法访问该文件(xy),因为它正在被另一个进程使用。

[在file.WriteAllText]

提前致谢。

c# file process createfile

0
推荐指数
1
解决办法
3236
查看次数

CreateFile 函数执行没有错误但不创建任何文件

我的方法中有这样的实现

std::string name2 = "D:\\Buffer\\Temp\\t_libpng" + std::to_string(i) + ".png";
Run Code Online (Sandbox Code Playgroud)
bool _write_png_file_cv2_(char const *filename,
    int width, 
    int height,
    int widthStep,
    png_byte color_type, 
    png_byte bit_depth, 
    png_bytep *row_pointers)
{
    // ...

    hFile = CreateFile((LPCWSTR)filename,      // Open Two.txt.
                       GENERIC_WRITE,          // Open for writing
                       0,                      // Do not share
                       NULL,                   // No security
                       OPEN_ALWAYS,            // Open or create
                       FILE_ATTRIBUTE_NORMAL,  // Normal file
                       NULL);                  // No template file

    if (hFile == INVALID_HANDLE_VALUE)
    {
        printf("ERROR:: Could not open file");
        CloseHandle(hFile);            // Close the first file.
        return false; …
Run Code Online (Sandbox Code Playgroud)

c++ file-io createfile

0
推荐指数
1
解决办法
126
查看次数